sgp*_*667 5 linux sed bash-scripting
我有两个文件,一个包含模式列表,另一个需要根据这些模式进行更改。到目前为止,我一直在尝试
cat patterns.txt| xargs -n1| sed 's/patternfromfile/subtitution/'
Run Code Online (Sandbox Code Playgroud)
但我不知道如何将 xargs 输入到 's/here//'
谢谢
您可能需要 xargs 的 -i 选项(有关详细信息,请查看手册页)。这基本上用{}模式替换,并为每个模式运行一次命令。因此,它将对每个模式在文件上运行一次;在创建模式时,您需要牢记这一点。
user@host [/tmp]$ cat patterns
a
[pd]ie
user@host [/tmp]$ cat file
hat
cherry pie
die alone
eat cake
user@host [/tmp]$ cat patterns | xargs -i sed 's/{}/moo/' file
hmoot
cherry pie
die moolone
emoot cake
hat
cherry moo
moo alone
eat cake
Run Code Online (Sandbox Code Playgroud)
或者,您可以使用其他东西从您的模式文件动态构建 sed 脚本。例如,您可以在模式文件上使用 sed 将它们全部应用到文件上。:)
user@host [/tmp]$ sed 's|^|s/|;s|$|/moo/;|' patterns | tee patterns.sed
s/a/moo/;
s/[pd]ie/moo/;
user@host [/tmp]$ sed -f patterns.sed file
hmoot
cherry moo
moo moolone
emoot cake
Run Code Online (Sandbox Code Playgroud)