簡體   English   中英

sed 或 awk 用前五個字符替換匹配

[英]sed or awk replace match with first five characters

我必須在每行的開頭用時間(前五個字符)替換 pünktlich 這個詞。 並不總是 14:03。 時間可能會改變,但保持相同的格式。

有:

14:03,RB 87(57140),Donauwörth,pünktlich,Kein Grund

需要:

14:03,RB 87(57140),Donauwörth,14:03,Kein Grund

時間總是在每一行的開頭。

你有什么主意嗎?

您只需使用awk即可完成此操作。 假設您的文件名為test.csv

awk 'BEGIN{FS=","; OFS=","}{print $1,$2,$3,$1,$5}' test.csv

Output 是:

14:03,RB 87(57140),Donauwörth,14:03,Kein Grund

說明:您使用FS定義輸入字段分隔符,使用OFS定義 output 字段分隔符。 然后按您想要的順序設置列。 $1表示第一列, $2表示第二列,其他列相同。

使用 GNU sed的捕獲組,讓file.txt內容為

14:03,RB 87(57140),Donauwörth,pünktlich,Kein Grund

然后

sed 's/^\([^,]*\)\(.*\)pünktlich/\1\2\1/' file.txt

給出 output

14:03,RB 87(57140),Donauwörth,14:03,Kein Grund

說明:我使用 2 個捕獲組:第一個是從行首 ( ^ ) 到 first ,即它確實包含零個或多個 ( * ) 而不是 ( ^ ) 逗號 ( , ),第二個是第一組和pünktlich之間的所有內容。 我再次替換與第 1 組內容、第 2 組內容、第 1 組內容匹配的內容。 免責聲明:如果任何一行包含多個pünktlich ,則只有最后一個將更改為時間。

(在 GNU sed 4.2.2 中測試)

mawk 'BEGIN {_^=_+=_^=FS=OFS=","} $_=$!!_'
14:03,RB 87(57140),Donauwörth,14:03,Kein Grund

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM