在bash脚本中列出带有单词匹配的路径

时间:2013-01-05 16:12:24

标签: bash

我有一个包含行列表的字符串。我想搜索任何特定字符串并列出包含该字符串的所有路径。 给定的字符串包含以下内容:

  755677 myfile/Edited-WAV-Files
  756876 orignalfile/videofile
  758224 orignalfile/audiofile
  758224 orignalfile/photos 
  758225 others/video
  758267 others/photo 
  758268 orignalfile/videofile1
  758780 others/photo1

我想提取并仅列出从Orignal File开始的路径。我的输出应该是这样的:

 756876 orignalfile/videofile
 758224 orignalfile/audiofile
 758224 orignalfile/photos 
 758268 orignalfile/videofile1

5 个答案:

答案 0 :(得分:1)

看起来很容易......

echo "$string" | grep originalfile/

grep originalfile/ << eof
$string
eof

或者,如果它在文件中,

grep originalfile/ sourcefile

答案 1 :(得分:0)

bash解决方案:

while read f1 f2
do
     [[ "$f2" =~ ^orignal ]] && echo $f1 $f2
done < file

答案 2 :(得分:0)

如果您的字符串跨越如下所示的几行:

755677 myfile/Edited-WAV-Files
756876 orignalfile/videofile
758224 orignalfile/audiofile
758224 orignalfile/photos
758225 others/video
758267 others/photo
758268 orignalfile/videofile1
758780 others/photo1

然后你可以使用这段代码:

echo "$(echo "$S" | grep -F ' orignalfile/')"

如果字符串没有被新行分隔,那么

echo $S | grep -oE "[0-9]+ orignalfile/[^ ]+"

答案 3 :(得分:0)

egrep '^[0-9]{6} orignalfile/' <<<"$string"

请注意:

  • ^匹配字符串的开头。您不希望匹配恰好位于中间某处orignalfile/

  • 的内容
  • [0-9]{6}匹配每行开头的六位数字

答案 4 :(得分:0)

您确定您的字符串包含换行符/换行符吗? 如果确实如此,那么DigitalRoss的解决方案将适用。

如果它不包含换行符,则必须包含换行符。在示例中,如果您的代码看起来像

string=$(ls -l)

然后你必须在没有换行的字段分隔符字符串前面添加它:

IFS=$'\t| ' string=$(ls -l)

或空IFS var:

IFS='' string=$(ls -l)

来自bash手册页的IFS文档:

IFS    The  Internal  Field  Separator  that  is  used for word splitting after
       expansion and to split lines into words with the read builtin command.  The
       default value is ``<space><tab><newline>''.