簡體   English   中英

使用sed命令和正則表達式替換行

[英]Replace lines using sed command with regex

我想使用sed linux命令替換文件中的某些行。 這是我要實現的目標:

 cn.x1.x2 y -> cn_x1.x2 y
 cn.x1.x2.x3 y  -> cn_x1_x2.x3 y
 cn.x1.x2.x3.x4 y -> cn_x1_x2_x3.x4 y

我想找到任何以'cn'開頭的單詞,並用下划線替換點,直到倒數第二個單詞為止。 如何使用正則表達式實現此目的?

提前致謝

您可以使用sed分兩步進行操作:

echo 'cn.x1.x2.x3.x4 y' | sed -r 's|\.|_|g; s|\_([^_]*)$|.\1|'

第一步用下划線s|\\.|_|g;替換所有點s|\\.|_|g;

第二步用點代替最后一個下划線。 s|\\_([^_]*)$|.\\1|

這可能對您有用(GNU sed):

sed -E ':a;s/\.([^.]*\.)/_\1/;ta' file

用下划線代替兩個句號中的第一個,並重復直到匹配失敗。

Perl進行救援!

perl -pe 's/\./_/ while /cn.*\..*\./' < input > output

換句話說,替換. 至少有兩個點時用_

如果您的數據在“ d”文件中,則通過gnu sed:

 sed -E 'h; s/(cn\S+)\.\S+\s\S+$/\1/;s/\./_/g;G;s/(.*)\ncn\S+(\.\S+\s\S+)$/\1\2/' d

通過perl:

perl -pe 's/(?!.[^.]+\s\S+$)\./_/xg' d

暫無
暫無

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

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