Linux
sed:反轉模式替換
我有以下
.txt
文件:ABC Corp 1234 7 Oaks Lane Denton; TX 76509-4321 (682) 543-7890
sed
我需要使用命令反向更改郵政編碼的最後 4 位。範例輸出:ABC Corp 1234 7 Oaks Lane Denton; TX 76509-1234 (682) 543-7890
它是第三行,在郵政編碼之前有文本,中間有一個破折號。所以第三行破折號之後的所有內容。只有當郵政編碼完全是自己時,我才能做到這一點。我試過了:
sed -i -e 's/([0-9])([0-9])([0-9])([0-9])([0-9])-([0-9])([0-9])([0-9])([0-9])/\9\8\7\6/' test.txt
但這將在反轉後刪除其他所有內容。
您可以首先通過查找該行獨有的模式來簡化您的命令。在下面的範例中,我們假設分號
;
對於要解析的行是唯一的(至少在您的範例文本中)sed
:# capture the last 4 digits of the line and substitute them in reverse order $ sed '/;/s/\(.\)\(.\)\(.\)\(.\)$/\4\3\2\1/' ABC Corp 1234 7 Oaks Lane Denton; TX 76509-1234 (682) 543-7890
與其他答案類似,但使用 Perl:
$ perl -lp -e '/;/ && s/(?<=-)\d{4}/reverse $&/e' <file ABC Corp 1234 7 Oaks Lane Denton; TX 76509-1234 (682) 543-7890
這將查找包含
;
字元的行,並反轉該行上破折號後的四位數字。數字的反轉是使用 Perl
reverse
函式完成的。