문자열과 일치하는 전체 줄을 복사하여 접두사와 함께 붙여넣는 방법은 무엇입니까?

문자열과 일치하는 전체 줄을 복사하여 접두사와 함께 붙여넣는 방법은 무엇입니까?

명령을 사용하여 파일의 특정 줄을 검색하려고 하는데 grep성공적으로 수행하고 있습니다.

이제 전체 행을 원래 행 뒤의 새 행에 복사하고 싶습니다. 즉, 원래 줄 다음에는 내용은 동일하지만 일부 접두사가 붙은 새 줄이 와야 합니다.

예: 원시 데이터:

Apple 
Samsung
Nokia
HTC

새 데이터가 다음과 같이 보이길 원한다고 가정해 보겠습니다.

Apple
Samsung
prefix Samsung
Nokia
HTC

참고: 여러 모드가 있는데 Samsung동일한 작업을 수행해야 한다는 것을 알았습니다.

grep배관을 시도했지만 sed실패했습니다. 누구든지 이 문제를 해결하도록 도와줄 수 있나요?

감사해요

답변1

를 사용하여 이 작업을 수행할 수 있습니다 awk.

여기에 귀하의 예를 사용하는 것이 하나의 접근 방식입니다.

awk '{print $0} /Samsung/ {print "prefix " $0}' filename

이 명령문을 분석해 보면 다음과 같습니다. {print $0}전체 줄만 인쇄합니다.

/Samsung/ {print "prefix " $0}전체 줄이 뒤따르는 "접두사" 인쇄를 나타냅니다. 단, 줄에 Samsung이 포함된 경우에만 해당됩니다.

답변2

sed -n 'p;s/^Samsung$/prefix &/p' file >newfile

먼저 현재 라인을 출력합니다. 그런 다음 문자열을 , 공백 및 일치하는 문자열(대체 문자열에서 확장되는 내용) Samsung로 대체하여 각 줄 앞에 문자열을 효과적으로 삽입합니다 . 교체가 성공하면 수정된 줄이 인쇄되고 출력에 새 줄이 추가로 생성됩니다.prefix&prefixSamsungSamsung

그러면 출력이 새 파일에 기록됩니다 newfile.

Samsung줄의 어느 위치에서나 일치하도록 문자열 일치를 완화하려면 예를 들어 다음을 사용하십시오.

sed -n 'p;s/.*Samsung/prefix &/p' file >newfile

위의 사용 awk과 동등한 결과를 얻으려면 다음을 수행하십시오 .

awk '1; /^Samsung$/ { print "prefix", $0 }' file >newfile

lone은 과 동일하게 현재 행을 출력하는 1단축키입니다 .{ print }{ print $0 }

줄이 해당 문자열이어야 한다고 요구하는 대신 줄 /Samsung/의 어느 위치에서든 문자열을 일치시키려면 just를 사용하세요 .Samsung

위 명령의 난독화된 변형 awk:

awk '1; /^Samsung$/ && $0 = "prefix " $0' file >newfile

답변3

이것은 GNU를 사용한 솔루션입니다 sed. 문자열 "Samsung"을 찾아 자신의 문자열로 바꾸고 "Samsung" 패턴과 일치하는 새 줄을 추가하고 시작 부분에 "접두사"를 추가합니다.

# doubled the example data to show it works on every line
$ sed 's/^Samsung$/&\nprefix &/' file
Apple 
Samsung
prefix Samsung
Nokia
HTC
Apple 
Samsung
prefix Samsung
Nokia
HTC

답변4

"예약된 공간"을 사용하는 또 다른 sed 구현

sed '/Samsung/ {h; s/^/prefix /; H; g;}' file

인용하다:https://www.gnu.org/software/sed/manual/html_node/Other-Commands.html

관련 정보