我有這些詞之間標籤(5個):的換行符替換選項卡,並與SED
cat dog
,我想這樣的輸出:
cat dog
我嘗試這樣做:sed 's/\t/\n/g; /^$/d' pets
並且輸出與sed 's/\t/\n/g' pets
相同:
cat dog
我不得不執行兩次sed才能得到我想要的。像這樣sed 's/\t/\n/g' pets>temp
sed '/^$/d' temp
有沒有辦法用一個命令獲得所需的輸出?
我有這些詞之間標籤(5個):的換行符替換選項卡,並與SED
cat dog
,我想這樣的輸出:
cat dog
我嘗試這樣做:sed 's/\t/\n/g; /^$/d' pets
並且輸出與sed 's/\t/\n/g' pets
相同:
cat dog
我不得不執行兩次sed才能得到我想要的。像這樣sed 's/\t/\n/g' pets>temp
sed '/^$/d' temp
有沒有辦法用一個命令獲得所需的輸出?
繼續我的評論。 sed 's/\t/\n/g
的問題是您將用'\n'
替換每個'\t'
。您想要將製表符的序列替換爲單個換行符。爲此你需要:
sed 's/\t\t*/\n/g'
,或者如果你喜歡明確封閉'\t'
在[ ]
這很好,以及。
表達'\t'
匹配單個選項卡,然後當由'\t\t*'
它相匹配的標籤和零個或多個標籤,遵循與單個'\n'
替換序列,產生所需輸出:
cat
dog
g
(全局)最後只會用一個換行符替換每個序列,例如
"cat dog fish"
(由製表符分隔),成爲
cat
dog
fish
讓我知道如果您有任何問題。
如果標籤的數量是重要的,BRE將讓你通過轉義花括號,像這樣指定範圍:
$ sed $'s/\t\{5\}/\\\n/' <<<$'one\t\t\t\t\ttwo'
one
two
注意,所以它是未知的,你還沒有指定的操作系統是否你」重新使用GNU sed,這會讓你在你的正則表達式中包含諸如\t
之類的東西。 (我使用FreeBSD和macOS,其中sed沒有這個功能。)但是你提到你正在使用bash
,它支持"format expansion"。您可以使用此bash功能將「文字」特殊字符插入腳本中。
'sed's/[\ t] [\ t] */\ n/g''?你可以刪除*字符類*符號(例如'['和']',但是它們表明你正在處理字符,這取決於你。'sed's/\ t \ t */\ n/g ''是等效的。 –
'xargs -n1'也可能適用,所有非空格字符序列將顯示在不同的行上 – Sundeep