如何使用Sed替換冒號之前的所有字元?

如何使用Sed替換冒號之前的所有字元?

如何替換以下字串

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單獨列印最後一列。NFawk

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'

相關內容