我正在嘗試爲報表準備文件。我已經是這樣的:查找帶有特定字符串的行,然後在bash中刪除它的換行符字符
foo
bar bar oof
bar oof
foo
bar bar
我想要得到這樣的輸出:
foo bar bar oof
bar off
foo bar bar
我想搜索字符串,在這種情況下,「富」,和內找到字符串的行我必須刪除換行符。
我做了搜索,但我只能找到'foo'也被刪除的解決方案。我怎樣才能做到這一點?
我正在嘗試爲報表準備文件。我已經是這樣的:查找帶有特定字符串的行,然後在bash中刪除它的換行符字符
foo
bar bar oof
bar oof
foo
bar bar
我想要得到這樣的輸出:
foo bar bar oof
bar off
foo bar bar
我想搜索字符串,在這種情況下,「富」,和內找到字符串的行我必須刪除換行符。
我做了搜索,但我只能找到'foo'也被刪除的解決方案。我怎樣才能做到這一點?
你可以做到這一點很容易與sed
,例如:
$ sed '/^foo$/N;s/\n/ /' file
foo bar bar oof
bar oof
foo bar bar
說明只包含foo
N
讀
/^foo$/
發現線/追加下一行輸入模式空間。
s/\n/ /
用space
替代'\n'
。
使用awk
:
awk -v search='foo' '$0 ~ search{printf $0; next}1' infile
您可以使用printf $0 OFS
像下面,如果你的領域沒有換行字符之前前導空格
awk -v search='foo' '$0 ~ search{printf $0 OFS; next}1' infile
測試結果:
$ cat infile
foo
bar bar oof
bar oof
foo
bar bar
$ awk -v search='foo' '$0 ~ search{printf $0; next}1' infile
foo bar bar oof
bar oof
foo bar bar
說明:
-v search='foo'
- 設置變量search
$0 ~ search
- 如果線/記錄/行包含變量{printf $0; next}
提到的正則表達式/模式/字符串 - 打印當前記錄沒有記錄分隔符,然後轉到下一行}1
1最後做默認操作,即打印當前記錄/行。我知道我需要「printf $ 0 OFS」空間。這也適用。謝謝! – leafymilkfish
不客氣 –
它的工作!我剛接觸'sed',不知道'^','$','N; s'標誌的用法。謝謝。 – leafymilkfish
加入俱樂部。 「sed」是你必須慢慢消化的動物之一。有點像吃鯨魚......每次只吃一口'')' –
我意識到我需要包含'foo'的行,不管它是否是唯一的字符串。所以我用'foo'替換了'^ foo $'。 – leafymilkfish