在bash中以特殊角色分开字符串



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

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

...

/path/to/myfile20.txt 20

因此,有第二列包含由空间启用的整数编号。在空间之前,我只需要字符串的部分。我仅使用"循环"找到解决方案。但是我需要一个函数,可以明确查找我的字符串中的" - character(Space)并在此时将其分配。

原则上我需要等效到matlabs" strsplit(str,定界符)"

如果您已经用

之类的内容读取文件
while read -r line; do

(您应该是),然后将两个参数传递给read

while read -r filename somenumber; do

read将在空格上拆分行,并将第一个字段分配给filename,并将其余的任何字段分配给somenumber

三个(许多)解决方案:

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

如果您需要迭代文件的每一行,则可以用bash切断空间后面的所有内容:

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

这也应该有效:

line="${line% *}"

这将绳子切割为空间的最后一次发生(从左起)。因此,即使路径包含空间,它也可以工作(只要在结束时遵循一个空间)。

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

即使您的文件名中的空格也可以工作。

相关内容

  • 没有找到相关文章

最新更新