我想删除在一个partiular字符串后面出现的所有换行符,并将其替换为制表符空格。比方说我的sample.txt如下
foo
bar bar bar bar some text
我希望它是
foo bar bar bar bar some text
我如何通过bash / awk / sed执行此操作。帮忙。
答案 0 :(得分:12)
在awk中:
awk '/foo$/ { printf("%s\t", $0); next } 1'
答案 1 :(得分:7)
以下是:
cat input.txt | sed ':a;N;$!ba;s/foo\n/foo\t/g'
有关简单sed 's/foo\n/foo\t/g'
无效的原因的更多信息:http://linuxtopia.org/online_books/linux_tool_guides/the_sed_faq/sedfaq5_009.html
答案 2 :(得分:4)
perl -pe 's/(?<=foo)\n/\t/' input
答案 3 :(得分:3)
这可能对您有用:
echo -e "foo\nbar bar bar bar some text"| sed '/foo$/{N;s/\n/\t/}'
foo bar bar bar bar some text
实际上:
echo -e "foo\nbar bar bar bar some text"| sed '/foo$/N;s/\n/\t/'
foo bar bar bar bar some text
后一种解决方案效率较低,但不是很多!
答案 4 :(得分:2)
并非所有工具都可以进行换行。 Perl可以:
cat file.txt | perl -p -e 's/\n/ /g'
答案 5 :(得分:2)
嗯。不确定这符合你的要求,但我会在vim中这样做:
:g/^foo$/join
或者,如果foo可以在一条线上的任何地方:
:g/foo$/join
当然,:%s/foo\n/foo\t/g
也会做得很好
答案 6 :(得分:1)
perl -pe 's/foo\n/foo\t/g' temp2.txt
以下是测试。
243> cat temp2.txt
foo
bar bar bar bar some text
pearl[ncm_o12.2_int_x86.@2].244> perl -pe 's/foo\n/foo\t/g' temp2.txt
foo bar bar bar bar some text
答案 7 :(得分:0)
sed
版本看起来像
#!/bin/sed -f
/foo/{
N
s/\n/\t/
}
如果您想在sed命令中执行此操作,则可以将上述内容简化为单行:
sed -e '/foo/N;y/\n/\t/' <sample.txt
说明:N
附加换行符和下一行输入; y/\n/\t
用标签替换所有换行符,或s/\n/\t/
用标签替换第一个换行符。
请注意,由于sed
是面向行的,因此输入中的换行符被视为行分隔符,而不是任何行的一部分(这与Perl相反)。