파일에서 쉼표가 포함된 줄을 검색하고 이를 이전 줄로 바꾸려는 경우

파일에서 쉼표가 포함된 줄을 검색하고 이를 이전 줄로 바꾸려는 경우

아래와 같이 여러 줄에 단일 쉼표가 있는 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/,/-1t-1d

$ ed -s file
g/,/-1t\
-1d
wq

또는 한 줄로:

printf '%s\n' g/,/-1t\\ -1d wq | ed -s file

관련 정보