첫 줄의 마지막 글자와 다음 줄의 첫 글자

첫 줄의 마지막 글자와 다음 줄의 첫 글자

다음과 같은 텍스트 파일이 있습니다.

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/"와 같다는 것은 알지만 숫자 앞의 마지막 문자와 다음 줄의 첫 번째 문자는 어떻게 말합니까?

답변1

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 + digital. 단, 개수는 0123456789로 제한됩니다.

답변2

그리고 awk:

# first field ends with 'a' and next line starts with 'c'
# i.e. current line starts with 'c' and previous line's first field ends with 'a'
$ awk 'p1 ~ /a$/ && /^c/{print p0; print} {p1=$1; p0=$0}' ip.txt
uenja 9999
comxq 8

Stéphane Chazelas에게서 힌트를 얻으세요답변:

$ cat ip.txt
xa 123
c1a 234
c2a 345

$ awk 'p1 ~ /a$/ && /^c/{print p0; print} {p1=$1; p0=$0}' ip.txt
xa 123
c1a 234
c1a 234
c2a 345

이 경우 중간 줄은 두 번 인쇄됩니다(한 번은 c처음에 일치하고 한 번은 a첫 번째 필드의 끝에서 일치).

답변3

사용sed

$ sed -En '/^[^ ]*a/{N;/\nc/p}' input_file
uenja 9999
comxq 8

관련 정보