Regex 替换文件中第一个匹配项的sed命令无效
我正在尝试替换文件中出现的第一个字符串。e、 g.尝试将第一个foo替换为linux sample.txtRegex 替换文件中第一个匹配项的sed命令无效,regex,awk,sed,Regex,Awk,Sed,我正在尝试替换文件中出现的第一个字符串。e、 g.尝试将第一个foo替换为linux sample.txt Hi foo bar This is again foo bar. 命令:sed'0,/foo/s//linux/'sample.txt 上述命令的实际输出(基本不变) 我的预期输出如下 Hi linux bar This is again foo bar. 有人能帮忙吗?/tmp/test.txt Hi foo bar! This is again foo bar 使用以下突击队仅
Hi foo bar
This is again foo bar.
命令:sed'0,/foo/s//linux/'sample.txt
上述命令的实际输出(基本不变)
我的预期输出如下
Hi linux bar
This is again foo bar.
有人能帮忙吗?/tmp/test.txt
Hi foo bar!
This is again foo bar
使用以下突击队仅替换搜索字符串的第一个或第二个
sed-e'1s/foo/linux/;t'-e'1,//s//linux//'/tmp/test.txt
结果:
Hi linux bar!
This is again foo bar
- 带有
awk
awk '!f && sub(/foo/, "linux"){f=1} 1' ip.txt
将为真,因为默认情况下未初始化的变量为假!f
将替换第一次出现的sub(/foo/,“linux”)
,并返回foo
-从而使1
和后续的f=1
始终为false!f
打印1
$0
- 使用任何
awk
以下选项可能会有所帮助:
awk '/foo/ && ++count==1{sub(/foo/,"linux")} 1' Input_file
sed -z 's/foo/linux/' Input_file
使用GNUsed
时,如果框中有足够的内存,以下内容可能会有所帮助:
awk '/foo/ && ++count==1{sub(/foo/,"linux")} 1' Input_file
sed -z 's/foo/linux/' Input_file
您缺少了替换文件内容的
-i
标志什么不起作用?替换还是就地编辑?现在不管是替换文件中的内联还是显示它。我的第一个重点是让它工作。如果你看一下,你会发现你的尝试只在GNU-sed上有效,而不是在本机提供的那个上MacOS@Sundeep如果第一个foo
不在第一行,这也会起作用对不起,之前误解了命令,这是一个很好的解决方法!