我有這樣的 grep 結果
Nov-06-22 00:01:16 id-03674-09704
Nov-06-22 00:01:16 id-03642-04246
我需要從結果中洗掉該id-.....-.....部分。
我正在使用這個:
grep file.txt | sed 's/ id-(\d){5}-(\d){5}/ /g'
但它回傳這個
Nov-06-22 00:01:16 id-03674-09704
Nov-06-22 00:01:16 id-03642-04246
我檢查了正則運算式id-(\d){5}-(\d){5},應該沒問題。
為什么sed不替換 grep 結果?
uj5u.com熱心網友回復:
由于您使用的是 POSIX BRE 正則運算式風格sed,\d因此不會被識別為數字匹配構造,并且{5}被視為文字{5}字串,而不是間隔量詞。
您需要替換\d為[0-9]并使用該-E選項來啟用 POSIX ERE 語法(或轉義間隔量詞大括號):
sed -E 's/ id-[0-9]{5}-[0-9]{5}//' file
sed 's/ id-[0-9]\{5\}-[0-9]\{5\}//' file
查看在線演示:
#!/bin/bash
s='Nov-06-22 00:01:16 id-03674-09704
Nov-06-22 00:01:16 id-03642-04246'
sed -E 's/ id-[0-9]{5}-[0-9]{5}//' <<< "$s"
輸出:
Nov-06-22 00:01:16
Nov-06-22 00:01:16
此外,請考慮僅使用 洗掉最后一列,awk甚至使用cut:
awk 'NF{NF-=1};1' file.txt
cut -d' ' -f1,2 < file.txt
uj5u.com熱心網友回復:
您可以cut通過指定分隔符來簡單地使用它,我認為在您的情況下是空格。您首先需要讀取檔案并執行 grep 然后使用cut命令。假設您已經有一個包含所選行的檔案,那么您可以使用cut如下:
cat file.txt | cut -d' ' -f1,2
輸出:
Nov-06-22 00:01:16
Nov-06-22 00:01:16
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/530019.html
下一篇:將字串正確拆分為陣列陣列
