2

这是 bash 脚本的一部分,我想对不以数字结尾的每一行做一些事情。我不知道如何引用每行的最后一个字符。

if lastchar != [0-9]
     awk blahblahblah
else
     awk blagblag
4

4 回答 4

3

做过滤器awk

 awk '/[0-9]$/{ blahblahblah } !/[0-9]$/ {blagblag}'
于 2013-02-22T17:48:08.410 回答
2
#!/bin/bash

while read line; do
    [[ $line =~ [0-9]$ ]] || awk blah
done < file.txt

或者 :

#!/bin/bash

while read line; do
    if [[ $line =~ [0-9]$ ]]; then
        awk blah
    else
        awk anotherblah
    fi
done < file.txt

=~是 in 的运算regexbash

于 2013-02-22T17:46:08.987 回答
1

在大多数情况下,我喜欢这种情况:

case "$line" in
    *[0-9]) awk blahblahblah ;;
    *) awk blagblag ;;
esac

但是,如果您无论如何都调用 awk,那么纯粹的 awk 答案可能是最好的。(除非您有未表明需要完成的步骤。)

于 2013-02-22T18:47:29.313 回答
0

其他答案都没有明确提到这一点:

我不知道如何引用每行的最后一个字符。

Aregular expression匹配模式:line ends in number可以使用[0-9]$[match any between 0and 9,后跟end-of-line( $is the end-of-line anchor)] 构造。

的锚点beginning-of-line^

于 2013-02-23T05:40:55.810 回答