替换文件中每个出现的以 # 开头的单词

Sha*_*tha 1 awk grep sed

替换文件中以 # 开头的单词或字符串。

例如,这是包含以下几行的文件:

$ cat file.txt
#apple sd#kf #banana adfe
#apple we#re #banana cow
Run Code Online (Sandbox Code Playgroud)

这是预期的输出

$ cat output.txt 
fruit=apple sd#kf fruit=banana adfe
fruit=apple we#re fruit=banana cow
Run Code Online (Sandbox Code Playgroud)

当我使用以下时

awk '{for (i=1; i<=NF; i++) $i~/^#/ && $i="fruit="$i }1'
Run Code Online (Sandbox Code Playgroud)

我得到以下输出:

fruit=#apple sd#kf fruit=#banana adfe
fruit=#apple we#re fruit=#banana cow
Run Code Online (Sandbox Code Playgroud)

当我使用以下时

sed 's/^#/fruit=/g' 
Run Code Online (Sandbox Code Playgroud)

我明白了

fruit=apple sd#kf #banana adfe
fruit=apple we#re #banana cow
Run Code Online (Sandbox Code Playgroud)

如何使用 awk、sed、grep 获得预期结果?

The*_*ird 5

断言^字符串的开头,这就是为什么您只看到一个替换。

您可以替换^by\B来断言非字边界。

sed -E 's/\B#/fruit=/g' file
Run Code Online (Sandbox Code Playgroud)

请注意,在这种情况下,它也可以匹配单个#

如果后面应该有一个单词字符,您可以使用捕获组并匹配至少一个单词字符。

sed -E 's/\B#([[:alnum:]_])/fruit=\1/g' file
Run Code Online (Sandbox Code Playgroud)