Dri*_*ven 4 linux bash grep sed shell-script
内容source.txt:
gold green white black blue
yellow magenta brown
tram kilo charlie tango
Run Code Online (Sandbox Code Playgroud)
嗨,大家好!我需要解开一个谜。
我正在尝试运行一个小脚本来 grep 文件source.txt,管道grep输出以sed替换字符串并将该行存储在新文件中pol.txt
grep -l "gold" source.txt | xargs sed 's/green/red/' > pol.txt
Run Code Online (Sandbox Code Playgroud)
而不是将唯一的那行存储在pol.txt:
gold red white black blue
Run Code Online (Sandbox Code Playgroud)
我有整个文件本身和我替换的字符串
gold red white black blue
yellow magenta brown
tram kilo charlie tango
Run Code Online (Sandbox Code Playgroud)
当我-l从 grep 命令中删除选项时,我有这个,当然 pol.txt 中没有任何内容
sed: can't read gold: No such file or directory
sed: can't read green: No such file or directory
sed: can't read white: No such file or directory
sed: can't read black: No such file or directory
sed: can't read blue: No such file or directory
Run Code Online (Sandbox Code Playgroud)
grep 需要作为测试人员,不幸的是“如果”不是一个选项。
以选择包含任何线gold从的Source.txt和替换的第一次出现green与red:
$ sed -n '/gold/{s/green/red/; p}' source.txt
gold red white black blue
Run Code Online (Sandbox Code Playgroud)
要将其保存在文件中:
sed -n '/gold/{s/green/red/; p}' source.txt >pol.txt
Run Code Online (Sandbox Code Playgroud)
-n 告诉 sed 不要打印行,除非我们明确要求它。
/gold/选择匹配正则表达式的行gold。
s/green/red/ 执行替换
p 印刷。
同样的逻辑:
$ awk '/gold/{gsub(/green/, "red"); print}' source.txt
gold red white black blue
Run Code Online (Sandbox Code Playgroud)
如果我们由于尚未解释的原因被迫使用 grep 管道,请尝试:
$ grep -l --null "gold" source.txt | xargs -0 sed -n '/gold/s/green/red/p'
gold red white black blue
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
24429 次 |
| 最近记录: |