在文本文件的最后一行中查找特殊字符

时间:2016-01-23 11:05:56

标签: bash grep

我有这样的文本文件(例如,a.txt):

 1.1.t     
 1.2.m

如果最后一行包含字符m,我想回显Ok

我试过了:

line=` awk '/./{line=$0} END{print line}'  a.txt`     
line1= `echo $line | grep "m"`       
if [[ $line1= `:` ]] ; then
echo
else
echo "Ok"
fi

它不起作用,错误是:

bash: conditional binary operator expected
bash: syntax error near ``:`,
`if [[ $line1= `:` ]] ; then'

3 个答案:

答案 0 :(得分:1)

if [[ $line1=]]语法不正确,因为=周围的空格丢失,并且反引号用于命令替换

awk本身可以解决这个问题:

awk '/./{line=$0} END{print (line ~ /\.m/)? "ok" : "no"}' file
ok

答案 1 :(得分:1)

您还可以使用tailgrep

[[ -n $(tail -1 a.txt | grep "m$") ]] && echo "OK" || echo "FAILED"

答案 2 :(得分:0)

您可以使用sed

sed -n '${/m$/s/.*/OK/p;}' file

默认情况下,选项-n会抑制输出。 $解决了最后一行输入问题。在这种情况下,我们会检查该行是否以m/m$/结尾。如果是这种情况,我们用行OK替换该行并打印出来。

顺便说一句,我要通过你的shell脚本,确实有太多的错误要解释,语法错误是因为$line1=之间没有空格[[ ... ]]有条件的。但是,嘿,这远不是该脚本的唯一问题。 ;)

http://www.shellcheck.net/可能是增强脚本的好资源。