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

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

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

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

答案1

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

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

在最近的 GNU 系统上,您可以使用 GNU 执行类似的操作sed

sed -ri.back 's/(\w+)-(\w+ed)\b/\2 with \1/g'

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

相关内容