2016-05-31 63 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