명령을 사용하여 파일의 특정 줄을 검색하려고 하는데 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
&
prefix
Samsung
Samsung
그러면 출력이 새 파일에 기록됩니다 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