Diff

使用 grep/awk 解析差異文件

  • August 12, 2011

我正在嘗試解析一些 sql 文件的標準差異以僅返回刪除部分。我一直在使用 grep 和 after 上下文 (-A),它幾乎可以工作(只是因為我知道刪除部分都會很短)。例如

diff $$_$1.sql $$_$2.sql|egrep -A3 "[01234567889][01234567889]d[01234567889][0123456789]"

我在想,使用 AWK,我可以告訴它從(上面的正則表達式)開始並在以數字開頭的第一行或以 – 結尾的第一行停止

我玩了一點,但似乎找不到正確的語法來做到這一點。這可以用 AWK 完成嗎?還是我應該使用其他工具?

我在想,使用 AWK,我可以告訴它從(上面的正則表達式)開始並在以數字開頭的第一行或以 – 結尾的第一行停止

如果不是您想要的,請給我們一個例子:

sed -n '/[0-9][0-9]d[0-9][0-9]/,/^[0-9]\|--$/p'

編輯

儘管您已經接受了我的回答,但我仍然想編輯我的文章以與您分享一個可以幫助您徹底解決問題的正則表達式。sed允許您使用-branch 命令排除匹配的行b

sed -n '/[0-9][0-9]d[0-9][0-9]/,/^[0-9]\|--$/ { /^[0-9]/b; p }'

但使用這個正則表達式,sed也可以刪除 REGEX1。於是,Lookahead出現在我的腦海中:

sed -n '/[0-9][0-9]d[0-9][0-9]/,/^[0-9]\|--$/ { /^[0-9](?:(?![0-9]d[0-9][0-9]).*)$/b; p }'

但它不起作用,因為sed, awk,grep使用不支持負前瞻的 POSIX RE 風格。您應該嘗試使用 Python、Perl、Ruby、…

引用自:https://serverfault.com/questions/300163