我有一个包含行列表的字符串。我想搜索任何特定字符串并列出包含该字符串的所有路径。 给定的字符串包含以下内容:
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
答案 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>''.