我想刪除所有在分區字符串後出現的換行符,並將其替換爲製表符空格。例如說我sample.txt的是如下通過bash/awk/sed/perl刪除特定文本後的新行
foo
bar bar bar bar some text
我想它是
foo bar bar bar bar some text
如何通過的bash/awk的/ SED做到這一點。幫助。
我想刪除所有在分區字符串後出現的換行符,並將其替換爲製表符空格。例如說我sample.txt的是如下通過bash/awk/sed/perl刪除特定文本後的新行
foo
bar bar bar bar some text
我想它是
foo bar bar bar bar some text
如何通過的bash/awk的/ SED做到這一點。幫助。
在awk中:
awk '/foo$/ { printf("%s\t", $0); next } 1'
並非所有工具都可以進行換行替換。 Perl可以:
cat file.txt | perl -p -e 's/\n/ /g'
mmm 1.你錯過了'foo'的要求。 2.你錯過了_tab_要求 – sehe 2011-12-15 11:48:48
嗯。不知道這符合你的要求,但我會做到這一點在vim:
:g/^foo$/join
或者,如果FOO可以在任何地方行:
:g/foo$/join
當然,:%s/foo\n/foo\t/g
會做很好地太
也嘗試過這個!工作:) – Greenhorn 2011-12-15 12:11:09
perl -pe 's/(?<=foo)\n/\t/' input
方法如下:
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
這可能會爲你工作:
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
的後者的解決方案效率較低,但不是太大!
perl -pe 's/foo\n/foo\t/g' temp2.txt
以下是測試。
243> cat temp2.txt
foo
bar bar bar bar some text
pearl[[email protected]].244> perl -pe 's/foo\n/foo\t/g' temp2.txt
foo bar bar bar bar some text
的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相反)。
「某些文字」發生了什麼? – 2011-12-15 11:51:43
只是錯過了,我猜沒有什麼區別。 所以期望的輸出應該是 foo酒吧酒吧酒吧一些文字 – Greenhorn 2011-12-15 11:56:28