다음과 같은 텍스트 파일이 있습니다.
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