提取字符串的一部分,在bash变量(Extracting part of a string to a

2019-08-20 19:56发布

小白在这里,对不起,如果一个重新发布。 我提取文件的字符串,并结束了一个线,是这样的:

abcdefg:12345:67890:abcde:12345:abcde

比方说,它是在一个名为的TestString冒号之间的值的长度可变不是恒定的,但我想保存的数量,作为一个字符串是好的,给一个变量,第二和第三冒号之间。 所以在这种情况下,我想最终我的新的变量,我们称之为extractedNum,是67890。 我想我必须使用SED,但从来没有使用过它,并试图让我的周围的头......谁能帮助? 干杯

在一个侧面说明,我使用找到从字符串中提取整条生产线,由ABCDEFG部分搜索字符的1弦,在这种情况下。

Answer 1:

这里的另一种纯bash的方式。 当你输入的是相当一致的,你并不需要在哪一段你挑选出很大的灵活性正常工作。

extractedNum="${testString#*:}"     # Remove through first :
extractedNum="${extractedNum#*:}"   # Remove through second :
extractedNum="${extractedNum%%:*}"  # Remove from next : to end of string

在阅读它,在例如while循环您还可以过滤文件:

while IFS=' ' read -r col line ; do
    # col has the column you wanted, line has the whole line
    # # #
done < <(sed -e 's/\([^:]*:\)\{2\}\([^:]*\).*/\2 &/' "yourfile")

sed命令被挑选出的第二列和限定从与空间整行该值。 如果你不需要整条生产线,只是删除空格+从更换和读丢弃行变量。 您可以在\ {2 \}位换号选择任何列。 (如果你想使用一个变量出现在双引号把命令)。



Answer 2:

使用阵列纯击:

testString="abcdefg:12345:67890:abcde:12345:abcde"
IFS=':'
array=( $testString )
echo "value = ${array[2]}"

输出:

value = 67890


Answer 3:

您可以使用cut了这种东西。 干得好:

VAR=$(echo abcdefg:12345:67890:abcde:12345:abcde |cut -d":" -f3); echo $VAR

对于它的乐趣,这是我会怎样(不)用做sed ,但我敢肯定有更简单的方法。 我想这会是我自己的未来读者的问题;)

echo abcdefg:12345:67890:abcde:12345:abcde |sed -e "s/[^:]*:[^:]*:\([^:]*\):.*/\1/"


Answer 4:

这应该为你工作:关键部分是awk -F: '$0=$3'

NewVar=$(getTheLineSomehow...|awk -F: '$0=$3')

例:

kent$  newVar=$(echo "abcdefg:12345:67890:abcde:12345:abcde"|awk -F: '$0=$3')

kent$  echo $newVar 
67890

如果您的文本被保存在var中testString ,你可以:

kent$  echo $testString                                                                                                                                                     
abcdefg:12345:67890:abcde:12345:abcde
kent$  newVar=$(awk -F: '$0=$3' <<<"$testString")
kent$  echo $newVar                                                                                                                                                         
67890


文章来源: Extracting part of a string to a variable in bash