sed를 사용하여 패턴과 일치하는 다른 줄 옆에 패턴과 일치하는 줄을 복사합니다.

sed를 사용하여 패턴과 일치하는 다른 줄 옆에 패턴과 일치하는 줄을 복사합니다.

www.website.com포함 행을 포함 행에 복사하고 싶습니다 thetext.

예를 들어 다음 입력을 변환하고 싶습니다.

Lorem ipsum dolor sit amet, elit.
Cras eu www.website.com velit vitae
Pellentesque interdum
thetext
Sed ullamcorper tellus

다음 출력을 입력하십시오.

Lorem ipsum dolor sit amet, elit.
Cras eu www.website.com velit vitae
Pellentesque interdum
thetextCras eu www.website.com velit vitae
Sed ullamcorper tellus

복사 붙여넣기 사용법을 모르겠습니다 sed. 조금 까다로운 것 같습니다.

답변1

ed( Bash여기서는 셸에서 사용됨)을 사용하여 다음과 같이 선을 이동하고 연결할 수도 있습니다.

str='
Lorem ipsum dolor sit amet, elit.
Cras eu www.website.com velit vitae
Pellentesque interdum
thetext
Sed ullamcorper tellus
'

# cf. http://wiki.bash-hackers.org/howto/edit-ed
cat <<-'EOF' | sed -e 's/^ *//' -e 's/ *$//' | ed -s <(echo "$str")
   H
   /www\.website\.com/m/thetext/
   -1,.j
  ,p
  q
EOF

파일을 제자리에서 편집하려는 경우 이 ed도구를 선택할 수 있습니다.

답변2

이것이 정확히 원하는 것인지 확실하지 않지만 다음과 같습니다.

  1. 관심 있는 행(포함된 행)이 보이면 www.website.com이를 예약된 공간에 복사하세요.
  2. 바꾸려는 텍스트( )가 보이면 thetext공간을 절약하는 내용을 추가한 다음
  3. 결과를 정리합니다.
sed -e '/www\.website\.com/h' \
    -e '/thetext/{' -e 'G' -e 's/\n//' -e '}'

나는 Normal 이외의 다른 작업을 위해 awk를 사용하는 것을 권장합니다 s///.

awk '
    /www\.website\.com/ { line=$0 }
    /thetext/ { $0 = $0 line }
    1'

관련 정보