试图对文件的每一行进行两次更改



我试图将一个字符串与一行匹配,然后对该行进行两次更改。例如,对于行";教父;,我想匹配";,";,删除";,";并添加";";到生产线的开始;"教父";。我试过sed和我所知道的所有其他东西(诚然不多(,但只能对线路进行一次更改,而不能进行两次更改。有什么帮助吗?

echo -e 'asdf ttrtnGodfather, The' | gawk '/, The/{gsub(", The", ""); print "The " $0; next} 9'
asdf ttrt
The Godfather

首先找到匹配线(/, The/(。仅对于匹配行({gsub(...), ...}(,删除匹配图案,并打印整个剩余行,并预加"The "next只打印一次匹配行(在The预处理的情况下,停止处理当前行并进入下一行(。9只是一个非零数字,用于指示gawk也打印不匹配的行。

链接或两个:

  • https://www.cyberciti.biz/faq/awk-find-and-replace-fields-values/
  • https://www.gnu.org/software/gawk/manual/html_node/Next-Statement.html
  • awk可以打印没有图案的线条吗

这是sed中的一个事务。

echo  'Godfather, The' | sed -E 's/^(.+), The$/The 1/'
The Godfather

如果需要2,请在脚本中使它们独立操作。

echo  'Godfather, The' | sed -E 's/^(.+), The$/The 1/; s/Godfather/Exorcist/;'
The Exorcist

echo  'Godfather, The' | 
sed -E 's/^(.+), The$/The 1/
s/Godfather/Exorcist/'
The Exorcist

使用perl:

perl -pe 's/(.*), The$/The $1/' <<< "Godfather, The"
# output :
# The Godfather

或sed:

sed -E 's/^(.*), The$/The 1/' <<< "Godfather, The"

sed不需要捕获组。

sed '/, The$/{s///;s/^/The /}'

在以, The结尾的行中,删除以s///结尾的行(重复上一个匹配,不替换任何匹配(。然后,在该行的开头添加The

最新更新