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

我只想提取并列出从原始文件开始的路径。我的输出应该是这样的:

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

5 回答 5

1

这看起来很容易...

echo "$string" | grep originalfile/

或者

grep originalfile/ << eof
$string
eof

或者,如果它在文件中,

grep originalfile/ sourcefile
于 2013-01-05T16:17:25.270 回答
0

一个bash解决方案:

while read f1 f2
do
     [[ "$f2" =~ ^orignal ]] && echo $f1 $f2
done < file
于 2013-01-05T16:23:15.173 回答
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>''.
于 2013-01-05T16:30:03.490 回答
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/[^ ]+"
于 2013-01-05T16:24:44.993 回答
0
egrep '^[0-9]{6} orignalfile/' <<<"$string"

笔记:

  • 匹配字符串的^开头。你不想匹配碰巧orignalfile/在中间某处的东西

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

于 2013-01-05T16:25:21.450 回答