2013-02-22 52 views
2

這是一個bash腳本的一部分 我想對每行不以數字結尾的內容做一些操作。 我不知道如何引用每行的最後一個字符。如果行的最後一個字符是[0-9]

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

回答

3

接線員regex執行過濾器awk

awk '/[0-9]$/{ blahblahblah } !/[0-9]$/ {blagblag}' 
+0

這是完美的,它補償了我在bash腳本中的無能!謝謝 – 2013-02-22 18:30:09

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 

=~bash

+0

這似乎沒有工作。我可能把它設置錯了。 #!/ bin/sh for file in $ *; do while read line;做 [[$ line =〜[0-9] $]] || sed's/$/| /' done 2013-02-22 17:58:15

+0

這是'bash'而已,這是你自己的標籤dude =)所以'#!/ bin/bash' – 2013-02-22 17:59:46

+0

#!/ bin/bash 而讀線;做 [[$ line =〜[0-9] $]] || sed's/$/| /' done 2013-02-22 18:25:55

1

我想情況下,這個在大多數情況下:

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

但如果你調用AWK反正,那麼純awk的答案可能是最好的。 (除非你有步驟,你沒有說明需要做。)其他答案的

0

都沒有明確地提到了這一點:

我不知道如何引用每個的最後一個字符線。

regular expression一個匹配的模式:line ends in number可使用[0-9]$構建[匹配09之間任何東西,然後是end-of-line$end-of-line anchor)]。

beginning-of-line的錨是^

相關問題