我有一個包含一堆資料的文本檔案。我能夠使用 sed 準確提取我想要的內容;但我只需要替換我搜索的特定模式,而不會丟失檔案中的其他內容。
我使用以下 sed 命令;但我需要更換;但不知道該怎么做。貓檔案.txt | sed -rn '/([a-z0-9]{2}\s){6}/p' > output.txt
sed 搜索以下模式:## ## ## ## ## ##,但我想像這樣替換該模式:######-######。
cat file.txt | sed -rn '/([a-z0-9]{2}\s){6}/p' > output.txt
Output:
1 | ec eb b8 7b e3 c0 47
9 | 90 20 c2 f6 3d c0 1/1/1
25 | 00 fd 45 3d a7 80 31
Desired Output:
1 | ecebb8-7be3c0 47
9 | 9020c2-f63dc0 1/1/1
25 | 00fd45-3da780 31
Thanks
uj5u.com熱心網友回復:
使用您顯示的樣本,請嘗試以下awk程式。
awk '
BEGIN{ FS=OFS="|" }
{
$2=substr($2,1,3) substr($2,5,2) substr($2,8,2)"-" substr($2,11,2) substr($2,14,2) substr($2,17,2) substr($2,19)
}
1
' Input_file
解釋:簡單的解釋是,制定FS并OFS作為|對awk方案。然后在第二個欄位中使用awk's 的substr功能,按照所示的 OP 樣本僅保留所需的值。其中substr函式適用于列印特定索引/位置數值的方法(例如:從哪個值到哪個值需要列印)。然后將所需的值保存到第二個欄位本身并列印當前行。
uj5u.com熱心網友回復:
與awk:
awk '{$3=$3$4$5"-"$6$7$8; print $1"\t",$2,$3,$NF}' file
1 | ecebb8-7be3c0 47
9 | 9020c2-f63dc0 1/1/1
25 | 00fd45-3da780 31
uj5u.com熱心網友回復:
如果要提取特定的子字串,則需要撰寫一個更具體的正則運算式來準確地提取出這些子字串。
sed -rn '/([a-z0-9]{2})\s([a-z0-9]{2})\s([a-z0-9]{2})\s([a-z0-9]{2})\s([a-z0-9]{2})\s([a-z0-9]{2})\s/\1\2\3-\4\5\6/' file.txt > output.txt
還要注意避免無用的東西是多么容易。cat
\s一般不便攜;POSIX 等價物是[[:space:]].
uj5u.com熱心網友回復:
這可能對你有用(GNU sed):
sed -E 's/ (\S\S) (\S\S) (\S\S)/ \1\2\3/;s//-\1\2\3/' file
模式匹配 3 個隔開的對兩次,洗掉第 2 對和第 3 對之間的空格,并將第 2 次匹配中的第一個空格替換為-。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/341773.html
