它總是讓我感到困惑的是sed
沒有j
命令,就像ed
一樣。希望sed擁有ed的便捷j命令的等價物
This question問如何加入一般的線,並有一堆很好的答案,許多特色的其他工具,如awk
和perl
。並且也有一些sed
解決方案,但它們都涉及使用s
命令來逐字編輯換行符,這是一種解決方案,由於各種原因,我覺得這種解決方法讓我覺得很糟糕。
現在,sed
也有一些模糊的命令與「hold」和「pattern」空間有關,我從來沒有想過如何使用它。我一直認爲 - BICBW - 如果我能弄清楚如何使用它,那麼保留空間就是sed對j
命令的回答。
所以我今天的問題 - 這是一個知識分子作爲一個實際的問題一樣多 - 是,是否有一個良好的,安全的,合理簡潔的方式做的
sed /pat/j
相當於這對於包含模式pat
的每一行,請將其加入到以下行(即,如果我使用g/pat/j/
,則將ed
)。
正如我所說,這是一個智力問題。我知道如何使用其他工具連接線,或者在帶引號的換行符上使用sed
和s
命令。但在我看來,應該有更好的辦法。
(或者,也許我應該只是SNARF的sed.c
副本,並在適當的j
命令破解。)
啊哈!所以,如果我正確地理解了這一點,'N'幾乎就像'j',除了它插入一個換行符。很有意思。(你的例子並不直接爲我工作;我不得不使用'sed -e'/ pat/N'-e's/\ n//''。你的例子不斷抱怨「替換命令中的壞標誌:'} ''。不知道這是我的sed版本還是什麼限制。) –
它使用不可移植的構造,因此不同seds中的行爲會有所不同。所以你的評論中的解決方案也會在不同的seds中表現不同。 –
@SteveSummit他在使用GNU'sed',每個命令後都不需要換行符。方便「單線」。 – Kusalananda