小白在这里,对不起,如果一个重新发布。 我提取文件的字符串,并结束了一个线,是这样的:
abcdefg:12345:67890:abcde:12345:abcde
比方说,它是在一个名为的TestString冒号之间的值的长度可变不是恒定的,但我想保存的数量,作为一个字符串是好的,给一个变量,第二和第三冒号之间。 所以在这种情况下,我想最终我的新的变量,我们称之为extractedNum,是67890。 我想我必须使用SED,但从来没有使用过它,并试图让我的周围的头......谁能帮助? 干杯
在一个侧面说明,我使用找到从字符串中提取整条生产线,由ABCDEFG部分搜索字符的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 \}位换号选择任何列。 (如果你想使用一个变量出现在双引号把命令)。
使用阵列纯击:
testString="abcdefg:12345:67890:abcde:12345:abcde"
IFS=':'
array=( $testString )
echo "value = ${array[2]}"
输出:
value = 67890
您可以使用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/"
这应该为你工作:关键部分是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