在bash中以特殊字符拆分字符串

时间:2015-05-04 14:22:29

标签: string bash ubuntu

我正在bash脚本中逐行读取文本文件中的文件名。但是线条看起来像这样:

/path/to/myfile1.txt 1
/path/to/myfile2.txt 2
/path/to/myfile3.txt 3

...

/path/to/myfile20.txt 20

因此,第二列包含按空格分隔的整数。我只需要空格前的字符串部分。 我发现只有使用“for-loop”的解决方案。但我需要一个函数,在我的字符串中显式查找“ - 字符(空格)”并在那时将其拆分。

原则上我需要相当于Matlabs“strsplit(str,delimiter)”

5 个答案:

答案 0 :(得分:3)

如果您已经使用类似

的内容阅读该文件
while read -r line; do

(和you should be),然后将两个参数传递给read

while read -r filename somenumber; do

read会在空格上拆分该行,并将第一个字段分配给filename,将剩余的字段分配给somenumber

答案 1 :(得分:2)

三个(众多)解决方案:

# Using awk
echo "$string" | awk '{ print $1 }'
# Using cut
echo "$string" | cut -d' ' -f1
# Using sed
echo "$string" | sed 's/\s.*$//g'

答案 2 :(得分:1)

如果您需要反复遍历文件的每一行,可以使用bash切断空间后面的所有内容:

while read -r line ; do
    # bash string manipulation removes the space at the end
    # and everything which follows it
    echo ${line// *}
done < file

答案 3 :(得分:1)

这也应该有效:

line="${line% *}"

这会剪切字符串在空格的最后一次出现(从左侧)。因此,即使路径包含空格(只要它跟在末尾的空格后面),它也会起作用。

答案 4 :(得分:0)

while read -r line
do
   { rev | cut -d' ' -f2- | rev >> result.txt;  } <<< $line
done < input.txt

即使您的文件名中有空格,此解决方案仍然有效。