我有这样的文本文件(例如,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'
答案 0 :(得分:1)
if [[ $line1=
:]]
语法不正确,因为=
周围的空格丢失,并且反引号用于命令替换
awk本身可以解决这个问题:
awk '/./{line=$0} END{print (line ~ /\.m/)? "ok" : "no"}' file
ok
答案 1 :(得分:1)
您还可以使用tail
和grep
:
[[ -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/可能是增强脚本的好资源。