텍스트 파일의 특정 부분을 선택하여 다른 파일에 인쇄/저장하고 싶습니다.
특정 패턴이 일치하면 선택이 시작되고 다른 패턴이 일치하면 선택이 종료됩니다. awk 없이 이 작업을 수행해야 합니다. sed를 사용하려고 합니다.
- 찾았으면 선택을 시작하세요.예상되는
- 발견될 때까지실제
> |e|build_event_details_json(e) })
expected collection contained: [{"id"=>18646, "state"=>"available", "salesEndAtUtc"=>"2018-09-22T00:00:00.000Z",actual collection contained: [{"id"=>18646
대답은
> expected collection contained: [{"id"=>18646, "state"=>"available", "salesEndAtUtc"=>"2018-09-22T00:00:00.000Z",
답변1
매우 우아하지도 않고 효율적이지도 않지만 작업을 완료합니다.
sed 's/actual/\n&/' file | sed -n '/expected/,/actual/p' | sed '$d'
expected collection contained: [{"id"=>18646, "state"=>"available", "salesEndAtUtc"=>"2018-09-22T00:00:00.000Z",
어쩌면 조금 더 나을 수도 있습니다(GNU 사용 sed
):
sed -n '/expected/,$ {s/actual.*$//; p; T; q; } ' file
이 T
명령을 사용할 수 없으면 시도해 보십시오.
sed -n '/expected/,$ {s/actual.*$//; p; tL; b; :L; q; } ' file
답변2
그냥 sed를 사용하세요:
<infile sed 's/expected/\n&/;s/.*\n//;s/actual/\n&/;s/\nactual.*//'
설명하다:
s/expected/\n&/
앞에 줄바꿈(구분)을 넣으세요expected
.s/.*\n//
이전 명령으로 생성된 안내선을 삭제합니다.s/actual/\n&/
앞에 줄바꿈(구분)을 넣으세요actual
.s/\nactual.*//
로 시작하는 위에서 생성된 줄을 삭제합니다actual
.
actual
위의 내용은 줄의 시작 부분에 있으면 빈 줄을 생성합니다. 빈 줄을 피하려면 다음을 사용하세요.
<infile sed 's/expected/\n&/;s/.*\n//;/^actual/d;s/actual.*//'
또한 위 명령은 일치하거나 일치하지 않는 모든 행을 변경하지 않고 그대로 두고 인쇄된다는 점에 유의 expected
하세요 actual
.
이를 방지하려면 /expected\|actual/!d
앞에 다음을 추가하세요.
<infile sed '/expected\|actual/!d;s/expected/\n&/;s/.*\n//;/^actual/d;s/actual.*//'
필요한 것이 있다면범위expected
과 사이의 줄을 actual
삭제하고 포함된 후행 줄을 제거한 actual
후 다음을 사용하세요.
<infile sed '/^expected/!{s/expected/\n&/};/^actual/!{s/actual.*/\n&/}' |
sed '/expected/,/actual/!d;/actual/d'
답변3
나는 이것이 다음과 같아야 한다고 생각합니다.
sed -n '/expected.*actual/{s/actual.*//;p;n};
/expected/,/actual/{s/actual.*//;p}' input
줄에 시작 태그와 끝 태그가 모두 포함되어 있으면 끝 태그 뒤의 모든 내용이 삭제되고 다음 줄이 읽혀집니다. 그렇지 않으면, 여는 태그와 닫는 태그를 포함하는 줄 사이에 무엇이든 인쇄하고 닫는 태그 뒤의 모든 것을 다시 삭제합니다.
답변4
sed를 사용하여 JSON을 구문 분석하려는 것 같습니다. 이는 좋은 생각이 아닙니다. 사용잭가능하다면.
그럼에도 불구하고 전체 파일을 메모리에 넣고 검색하고 바꿀 수 있습니다.
$ cat file
foo
bar
> |e|build_event_details_json(e) })
expected collection contained: [
{"id"=>18646,
"state"=>"available",
"salesEndAtUtc"=>"2018-09-22T00:00:00.000Z",
actual collection contained: [
{"id"=>18646
baz
qux
$ sed -n 'H;${g;s/.*\(expected.*\)actual.*/\1/p}' file
expected collection contained: [
{"id"=>18646,
"state"=>"available",
"salesEndAtUtc"=>"2018-09-22T00:00:00.000Z",
부터 변경되니 참고해주세요마지막"기대한다"마지막*
수량화 욕심 때문에 '실제'를 따르다
$ cat file
foo
expect1
bar
> |e|build_event_details_json(e) })
expected collection contained: [
{"id"=>18646,
"state"=>"available",
"salesEndAtUtc"=>"2018-09-22T00:00:00.000Z",
actual collection contained: [
{"id"=>18646
baz
actual2
qux
$ sed -n 'H;${g;s/.*\(expected.*\)actual.*/\1/p}' file
expected collection contained: [
{"id"=>18646,
"state"=>"available",
"salesEndAtUtc"=>"2018-09-22T00:00:00.000Z",
actual collection contained: [
{"id"=>18646
baz