Linux

SED - 使用其他行的某些內容生成行

  • April 5, 2022

我的文件夾中有一些文件

每個文件都有這樣的結構:

...
product: Nike New Awesome Shoe
price: 123
color: black
...

我需要在使用 *.txt 的所有文件中使用單個 SED 命令完成以下場景

基本上,我需要在以該模式開頭的一行中獲取 First word After 模式,並在新行中與“brand:”連接。

選擇以 (product: ) 開頭的行 Get first word after (product: ) Create a new line concatenating brand: with the first word from other line

PS:我沒有行號,因為行號可能會更改文件。

...
product: Nike New Awesome Shoe
brand: Nike
price: 123
color: black
...

使用sed,您可以複製匹配保留所需的字元串

$ sed '/^product/{p;s/[^ ]* \([^ ]*\).*/brand: \1/;}' input_file
...
product: Nike New Awesome Shoe
brand: Nike
price: 123
color: black
...

你可以使用這個:

sed 's/^product: \([^ ]*\) .*/&\
brand: \1/' file.txt

^product: 匹配以產品開頭的行**:**

\([^ ]*\)引用後面的詞product:

&插入整個匹配項(在本例中為整行),反斜杠後跟換行符添加換行符,換行符以brand: 第一個引用的\1單詞開頭。

引用自:https://unix.stackexchange.com/questions/697145