通过bash/awk/sed/perl删除特定文本后的新行

Gre*_*orn 11 bash awk sed

我想删除在一个partiular字符串后发生的所有换行符,并将其替换为制表符空格.比方说我的sample.txt如下

foo
bar bar bar bar some text
Run Code Online (Sandbox Code Playgroud)

我希望它是

foo    bar bar bar bar some text
Run Code Online (Sandbox Code Playgroud)

我如何通过bash/awk/sed完成此操作.帮忙.

Mic*_*ber 14

在awk中:

awk '/foo$/ { printf("%s\t", $0); next } 1'
Run Code Online (Sandbox Code Playgroud)

  • 对于那些对最后的1感到疑惑的人; 简单地说,它转换为"{print $ 0}",以便*不匹配foo的行按原样打印,即基本格式为"awk"{/ some_pat/{/*如果pat为true*/} {/*如果pat为false*/}'` (4认同)

Dej*_*kic 7

方法如下:

cat input.txt | sed ':a;N;$!ba;s/foo\n/foo\t/g'
Run Code Online (Sandbox Code Playgroud)

更多关于为什么简单sed 's/foo\n/foo\t/g'在这里不起作用:http://linuxtopia.org/online_books/linux_tool_guides/the_sed_faq/sedfaq5_009.html

  • 您不需要使用“cat”。您可以直接将文件名传递给“sed”。 (2认同)

cod*_*ict 5

perl -pe 's/(?<=foo)\n/\t/' input
Run Code Online (Sandbox Code Playgroud)