2016-05-31 125 views
-1

我有一個變量叫input,它是空格分開的,我想用冒號去掉字符串並得到第三個元素。在bash中如何去掉字符串

input=a:b:c 1:2:3 x:y:z 

output=c 3 z 
+1

我相信你會發現在這裏如何做到這一點噸的問題。 –

+0

你可能想看看'awk','cut'和'sed'的手冊頁 –

回答

3

可以填充與輸入字符串BASH數組,然後取代一切都交給最後一個冒號:

input='a:b:c 1:2:3 x:y:z' 
read -ra arr <<< "$input" 

echo "${arr[@]/*:}" 
c 3 z 
+1

真棒,請你解釋一下 – user60679

+0

'read -ra arr <<<「$ input」'用數組'arr'填充數組'arr'你的輸入字符串,然後''$ {arr [@]/*:}「'從每個元素中刪除所有直到最後的':'。 – anubhava

2

您可以使用for循環和cut command

for values in $input; do 
    echo "$values" | cut -d ':' -f 3 
done 
2
echo a:b:c 1:2:3 x:y:z | awk -F: '{print $3,$5,$7}' |awk '{print $1,$3,$5}' 

個OR

echo a:b:c 1:2:3 x:y:z | tr ':' ' ' |awk '{print $3,$6,$9}' 
3
$ grep -oP '(?<=:).(?=\s|$)' <<< 'a:b:c 1:2:3 x:y:z' | paste -s -d ' ' 
c 3 z 

grep搜索具有:它後面的任何字符(使用正向後斷言)和\s(空格)或$(行尾)後(使用正先行斷言) 。

對於這些字符中的每一個,我們將它們以分隔符作爲空間連續粘貼(將行轉換爲具有值的行)。

+1

謹慎解釋? :)這並不簡單。 –

+0

@JulienLopez增加了一些:) – ritesht93

0
echo a:b:c 1:2:3 x:y:z | awk -F '[: ]' '{print $3,$6,$9}' 
c 3 z 

爲了打印每個字段中的每第三個字符,我們必須使用分隔符。 在這種情況下,最明顯的是冒號,但也必須考慮字段之間的空間。然後打印每一個變得可行...

+0

請在編輯中解釋您的解決方案,謝謝! – Will