這是很容易做到的SED,你甚至不需要使用保留空間(sed的輔助緩衝)。鑑於input
文件如下:
$ cat input
@"Afghanistan.png",
@"Albania.png",
@"Algeria.png",
@"American_Samoa.png",
你應該使用這個命令:
sed 's/@"\([^.]*\)\.png",/&\
@"\1",/' input
結果:
$ sed 's/@"\([^.]*\)\.png",/&\
@"\1",/' input
@"Afghanistan.png",
@"Afghanistan",
@"Albania.png",
@"Albania",
@"Algeria.png",
@"Algeria",
@"American_Samoa.png",
@"American_Samoa",
這個命令只是一個替代命令(s///
)。它匹配任何從@"
開始,然後是非時間段字符([^.]*
),然後是.png",
。此外,它使用組括號\(
和\)
匹配.png",
之前的所有非週期字符,因此我們可以獲得該組匹配的內容。因此,這是待替換的正則表達式:
@"\([^.]*\)\.png",
因此,遵循命令的替換部分。 &
命令只是將在@"\([^.]*\)\.png",
中匹配的所有內容插入到已更改的內容中。如果它是替換零件的唯一元素,則輸出中不會有任何變化。但是,在&
之後有一個換行符 - 由反斜槓\
後跟實際換行符表示 - 在新行中,我們添加@"
字符串,接着是第一組的內容(\1
),然後是字符串",
。
這只是對命令的簡要說明。希望這可以幫助。另外,請注意,您可以使用\n
字符串來表示某些版本的sed(如GNU sed)中的換行符。它會使一個更簡明易讀命令:
sed 's/@"\([^.]*\)\.png",/&\[email protected]"\1",/' input
傑出線應用重複。你不會開車解釋你的命令行嗎? –
我只是想解釋它甚至在閱讀您的評論:)希望它使解決方案更清晰。很高興回答關於它的任何其餘問題。 – brandizzi