使用 sed 将文件中的所有行替换为行中第一次出现的模式

使用 sed 将文件中的所有行替换为行中第一次出现的模式

是否可以在一根衬垫中完成?

我有这样的输出:

"First line" - Description  
" Second line" - Description  
"Third line" - Description  
" Fourth line" - Description  

该输入是自动生成的。

我想将每行第一次出现的"(引号+空格)替换为"(引号)。如果我在全球范围内应用替换,它也会改变每次出现的line" -to line"-,所以我想知道是否可以使用 sed oneliner 来完成此操作。

我尝试过^这样使用

sed -r ':a;N;$!ba;s/(\^\" )/\"/g'

但它不起作用,它不能取代任何东西。我试过

sed -r ':a;N;$!ba;s/(^|\" )/\"/g'

并且它取代了所有出现的情况。我刚刚开始使用 sed,所以我真的不知道我是否做错了什么。

我在这里缺少什么?

答案1

你想太多了。 sed默认情况下仅替换行中的第一个实例(不带修饰符/g),尽管您仍然想要锚定,因为您不太需要行中的第一个实例,而是需要行开头的实例;并且您通常不需要尝试使用的显式行操作(为什么?)。

sed 's/^" /"/'

答案2

一个更一般的答案,因为我无法评论 geekosaur 的答案 - 你不会放置 ^ (行锚点的开头)。例如,如果您想用 B 替换第一次出现的 A,您可以

sed 's/A/B/'

答案3

使用珀尔

~$ perl -pe 's/^" /"/;'   file 

使用(以前称为 Perl_6)

~$ raku -pe 's/^\" \s /"/;'  file

输入示例:

"First line" - Description  
" Second line" - Description  
"Third line" - Description  
" Fourth line" - Description  

示例输出(两个代码示例):

"First line" - Description  
"Second line" - Description  
"Third line" - Description  
"Fourth line" - Description  

https://perldoc.perl.org/perlre
https://perldoc.perl.org/perltrap#Sed-Traps
https://docs.raku.org/language/regexes

相关内容