![파일에서 쉼표가 포함된 줄을 검색하고 이를 이전 줄로 바꾸려는 경우](https://linux55.com/image/179603/%ED%8C%8C%EC%9D%BC%EC%97%90%EC%84%9C%20%EC%89%BC%ED%91%9C%EA%B0%80%20%ED%8F%AC%ED%95%A8%EB%90%9C%20%EC%A4%84%EC%9D%84%20%EA%B2%80%EC%83%89%ED%95%98%EA%B3%A0%20%EC%9D%B4%EB%A5%BC%20%EC%9D%B4%EC%A0%84%20%EC%A4%84%EB%A1%9C%20%EB%B0%94%EA%BE%B8%EB%A0%A4%EB%8A%94%20%EA%B2%BD%EC%9A%B0.png)
아래와 같이 여러 줄에 단일 쉼표가 있는 test.txt 파일이 있습니다.
$ cat test.txt
ABCD
Test,plan
Sample
Working
Tester,Developer
Learn
Teach
Study
Coding
Stack,exchange
필요한 출력은 다음과 같습니다.
ABCD
ABCD
Sample
Working
Working
Learn
Teach
Study
Coding
Coding
Unix 명령을 사용하여 위 내용을 인쇄하는 방법을 찾을 수 없습니다. 이 쉼표 줄 검색을 처리하고 위 줄로 바꾸는 방법을 알려주십시오.
교체할지 확실하지 않은 경우 다음 검색을 시도해 보세요.
#Searching comma
sed -i 's/,/replace_above_line/g' test.txt
쉼표가 포함된 파일의 이전 줄로 전역 교체를 수행하고 싶습니다.
답변1
의 sed
경우 패턴 공간에 두 줄을 유지해야 합니다.
sed -i -e '$!N;s/\(.*\)\n.*,.*/\1\n\1/' -e 'P;D' file
또는 를 사용하여 쉼표 줄( ) 앞의 각 줄을 ed
표시한 다음 복사( )하고 돌아가서 원래 줄을 삭제할 수 있습니다( ).g/,/-1
t
-1d
$ ed -s file
g/,/-1t\
-1d
wq
또는 한 줄로:
printf '%s\n' g/,/-1t\\ -1d wq | ed -s file