sed 如何从文件中获取模式

sed 如何从文件中获取模式

我有两个文件,一个包含模式列表,另一个需要根据这些模式进行更改。到目前为止,我一直在尝试

cat patterns.txt| xargs -n1| sed 's/patternfromfile/subtitution/'

但我不确定如何将 xargs 输入到 's/here//'

谢谢

答案1

您可能需要 xargs 的 -i 选项(有关详细信息,请查看手册页)。这本质上是{}用模式替换,并针对每个模式运行一次命令。因此,它将针对每个模式对文件运行一次 sed;在创建模式时,您需要牢记这一点。

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

或者,您可以使用其他东西从模式文件动态构建 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

答案2

您可以构建这样的正则表达式:

regex=$(tr '\n' '|' < patterns.txt)
sed -ri "s/$regex/replacement/" filename

您可以选择将“g”标志添加到 s/// 命令。

答案3

不知道你有什么模式:

如果您想直接编辑文件,请使用 -i 选项:

   while read pattern
    do
        sed -i 's/"${pattern}"/substitution/' yourfile
    done < patterns.txt

或者将输出重定向到新文件:

   while read pattern
    do
        sed 's/"${pattern}"/substitution/' yourfile >> outfile
    done < patterns.txt

相关内容