我有要处理的文本文件(*.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