Unix 将匹配的字符串显示到行尾
如何在文件中查找特定字符串并显示匹配的字符串和行的其余部分 例如,我在Unix 将匹配的字符串显示到行尾,unix,awk,sed,grep,cut,Unix,Awk,Sed,Grep,Cut,如何在文件中查找特定字符串并显示匹配的字符串和行的其余部分 例如,我在a.txt中有一行: 此代码在我的代码中提供了ORA-12345。 所以,我找到了字符串“ORA-” 输出应为: ORA-12345在我的代码中 尝试使用grep: grep 'ORA-*' a.txt 但它在输出中给出了整个行 # Create test data: echo "junk ORA-12345 more stuff" > a.tst echo "junk ORB-12345 another stuf
a.txt
中有一行:
此代码在我的代码中提供了ORA-12345。
所以,我找到了字符串“ORA-”
输出应为:
ORA-12345在我的代码中
尝试使用grep:
grep 'ORA-*' a.txt
但它在输出中给出了整个行
# 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
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
和sed
echo "This code gives ORA-12345 in my code." | sed 's/.*ORA-/ORA-/'
使用
grep
-grep-o-E'ORA-[0-9]+'
。使用sed
-sed-n's/.*\(ORA-[0-9]*\).$/\1/p'
。/ORA/
和$0~“ORA”
不是一样的吗?这可以简化为:i=index($0,ORA){print substr($0,i)}
@dev null,是的,afaik.notecat文件
是不必要的,你可以直接说grep。。。文件
。