将匹配的字符串显示在行尾

时间:2015-10-21 23:21:58

标签: unix awk sed grep cut

如何在文件中查找特定字符串并显示匹配的字符串和其余部分?

例如 - 我在a.txt中有一行:

This code gives ORA-12345 in my code.

所以,我找到字符串' ORA - '

输出应该是:

ORA-12345 in my code

尝试使用grep:

grep 'ORA-*' a.txt

但它在输出中给出了整行。

3 个答案:

答案 0 :(得分:2)

# Create test data:
echo "junk ORA-12345 more stuff" > a.tst
echo "junk ORB-12345 another stuff" >> a.tst
# Actually command:
# the -o (--only-matching) flag will print only the matched result, and not the full line
cat a.tst | grep -o 'ORA-.*$' # ORA-12345 more stuff

正如fedorqui指出你可以使用:

grep -o 'ORA-.*$' a.tst

答案 1 :(得分:0)

awk中的另一个答案:

awk '$0 ~ "ORA" {print substr($0, match($0, "ORA"))}' a.tst

从内到外,这里有什么:

match($0, "ORA")查找行ORA中的位置。在这种情况下,恰好是第17位。

substr($0, match($0, "ORA"))然后从第17位返回到该行的末尾。

$0 ~ "ORA"确保上述内容仅适用于包含ORA的行。

答案 2 :(得分:0)

sed

echo "This code gives ORA-12345 in my code." | sed 's/.*ORA-/ORA-/'