我的文件包含:
<xyz name="hello" desc="hello"/><xyz name="hello1" desc="hello1"/><xyz name="hello2" desc="hello2"/><abc name="hello4" desc="hello4"/><abc name="hello5" desc="hello5"/>我的脚本:
#!/bin/sh
test=`grep 'xyz' file`
echo $test这给了我如下输出
<xyz name="hello" desc="hello"/><xyz name="hello1" desc="hello1"/><xyz name="hello2" desc="hello2"/>我希望我的输出为
name="hello" desc="hello"
name="hello1" desc="hello1"
name="hello2" desc="hello2"发布于 2014-05-22 19:21:29
grep喜欢这些东西:
$ grep -Po '(?<=<xyz )[^/]*' file
name="hello" desc="hello"
name="hello1" desc="hello1"
name="hello2" desc="hello2"解释
-Po在(-o).(?<=<xyz )[^/]* (?<=<xyz ) string.[^/]*匹配到character. character.之前,使用Perl正则表达式(-P)并仅打印<xyz开始捕获的匹配项
发布于 2014-05-22 19:55:49
您也可以尝试此sed命令,
sed -r 's/^<xyz ([^/]*)\/><xyz ([^/]*)\/><xyz ([^/]*)\/>.*$/\1\n\2\n\3/g' file输出:
name="hello" desc="hello"
name="hello1" desc="hello1"
name="hello2" desc="hello2"发布于 2014-05-22 20:24:04
使用多字符RS的GNU awk:
$ awk -v RS='/>' 'sub(/^<xyz /,"")' file
name="hello" desc="hello"
name="hello1" desc="hello1"
name="hello2" desc="hello2"https://stackoverflow.com/questions/23805338
复制相似问题