
如何替換以下字串
hd_ma_prod_customer_ro:*:123456789:john.doe
與約翰·多伊
基本上我需要查找最後一個冒號 (:) 並刪除之前的所有內容(包括它)。
答案1
假設您的實際意思是要刪除直到最後一個冒號的所有內容並保持john.doe
完整:
echo 'hd_ma_prod_customer_ro:*:123456789:john.doe' |
sed 's/.*://'
解釋:
第一行只是透過管道將測試字串用於sed
範例目的。
第二個是基礎sed
代換。第一個和第二個之間的部分/
是要搜尋的正規表示式,第二個和第三個之間的部分是要替換的內容(在本例中沒有任何內容,因為我們正在刪除)。
對於正則表達式,.
匹配任何字符,*
重複任意次數(包括零次)並:
匹配冒號。因此,它實際上是後面跟著冒號的任何內容。由於.*
可以包含冒號,因此匹配是“貪婪”的,並且包含直到最後一個冒號的所有內容。
答案2
另一種方法是使用awk
:
awk -F: '{ print $NF }'
答案3
sed -r 's/:/\t/g' filename | awk -F'\t' '{print $4}'
我正在替換所有出現的:與一個標籤然後使用awk
提取字串 john.doe。
如果您沒有文件,可以嘗試此操作。
echo 'hd_ma_prod_customer_ro:*:123456789:john.doe' | sed -r 's/:/\t/g' |
awk -F'\t' '{print $4}'
根據 Graeme 的評論,我們可以使用以下變數awk
單獨列印最後一列。NF
awk
echo 'hd_ma_prod_customer_ro:*:123456789:john.doe' | sed -r 's/:/\t/g' | awk -F'\t' '{print $NF}'
合併格雷姆的評論以消除不必要的sed
該命令可以修改如下。
echo 'hd_ma_prod_customer_ro:*:123456789:john.doe' | awk -F':' '{print $NF}'
答案4
請嘗試
echo 'abc:fjk' |sed 's/.*:/john.doe/g'
並刪除
echo 'abc:fjk' |sed 's/.*://g'