Text-Processing

第一行的最後一個字母和下一行的第一個字母

  • August 29, 2022

我有這樣的文本文件:

qwery 45
uiopbmc 6
uenja 9999
comxq 8

我想說:

mylist=['a','c']
if last letter in the line is 'a' (before the number) and the first letter in the next line is 'c', print both two lines.

結果:

uenja 9999
comxq 8

我知道 sed 中的第一行,例如“s/”,但我怎麼能說出數字前的最後一個字母和下一行的第一個字母?

sed -n '1N;/a .*\nc/p;N;D'

將報告包含"a "後跟以 . 開頭的行的行"c"

也可以看看:

sed -n '1N;/a[^[:alpha:]]*\n[^[:alpha:]]*c/p;N;D'

匹配第一行a的最後一個字母¹ ,以及第一個**字母為的第二行c

請注意,輸入如下:

xa 123
c1a 234
c2a 345

它同時報告:

xa 123
c1a 234

c1a 234
c2a 345

兩者都符合要求。


¹ 嚴格來說,儘管有字母名稱,但它不僅限於字母腳本中的字母,[[:alpha:]]匹配構成人類語言單詞的字元,無論它們是拉丁語或希臘語等字母腳本還是不像漢字……至少在 GNU 系統上,您會發現它還匹配 0123456789 以外的數字,以滿足衝突的 POSIX / C 標準要求:alnum = alpha + digit,但該數字僅限於 0123456789。

引用自:https://unix.stackexchange.com/questions/715339