由连字符连接的单词的文本处理

use*_*777 1 text-processing

我有我处理的文本文件 (*.txt),我想找到由连字符连接的单词,例如“药物相关”或“药物相关”、“药物相关”。

我需要您的帮助将第一个转换为“与毒品有关”,而将第二个转换为“与毒品有关”。在一个文件中,我可以有很多这样的词,有一次它是“关联的”、“链接的”、“相关的”,并且可以有其他术语。

Sté*_*las 5

perl -pi.back -e 's/(\w+)-(\w+ed)\b/$2 with $1/g' ./*.txt
Run Code Online (Sandbox Code Playgroud)

这是便携式的,可以与任何已perl安装的系统一起使用。

在最近的 GNU 系统上,你可以用 GNU 做类似的事情sed

sed -ri.back 's/(\w+)-(\w+ed)\b/\2 with \1/g'
Run Code Online (Sandbox Code Playgroud)

POSIXly:

for f in ./*.txt; do
  mv -i "$f" "$f.back" &&
    sed -e :1 -e 's/\([[:alnum:]]\{1,\}\)-\([[:alnum:]]\{1,\}ed\)\(\([^[:alnum:]].*\)\{0,1\}\)$/\2 with \1\3/;t1' < "$f.back" > "$f"
done
Run Code Online (Sandbox Code Playgroud)