각 줄 끝에 텍스트 추가


93

나는 Linux 명령 줄에 있으며 파일이 있습니다.

127.0.0.1
128.0.0.0
121.121.33.111

내가 원하는

127.0.0.1:80
128.0.0.0:80
121.121.33.111:80

동료들이 sed를 사용하고 있었지만 sed 매뉴얼을 읽은 후에도 여전히 명령 줄에서 수행하는 방법이 명확하지 않습니까?


2
좋은 질문이고 당신이 그것을 어떻게 구성했는지 사랑합니다.
Anthony Rutledge

답변:


141

다음과 같은 것을 사용해 볼 수 있습니다.

sed -n 's/$/:80/' ips.txt > new-ips.txt

파일 형식이 질문에서 설명한 것과 같다고 가정합니다.

s///대체 명령 일치 ( 발견 ) 파일의 각 줄 끝에합니다 (사용하여 $문자를) 다음 (추가 을 대체를 ) :80각 행의 마지막에. ips.txt파일은 입력 파일 ... 그리고 new-ips.txt새로 생성 된 파일입니다 ( 변경의 최종 결과. )


또한 이미 포트 번호가 첨부 된 IP 번호 목록이있는 경우 ( Vlad 에서 언급 하고 aragaer 에서 제공 한대로 ) 다음과 같은 것을 사용해 볼 수 있습니다.

sed '/:[0-9]*$/ ! s/$/:80/' ips.txt > new-ips.txt

예를 들어, 입력 파일이 다음과 같은 경우 (참고 :80) :

127.0.0.1
128.0.0.0:80
121.121.33.111

최종 결과는 다음과 같습니다.

127.0.0.1:80
128.0.0.0:80
121.121.33.111:80

1
좋아, 명확하게 ... 포트가 이미 존재하는 줄을 제외하는 조건이 있어야합니다.
Vlad

3
sed '/:[0-9]*$/ ! s/$/:80/'
aragaer 2013

3
자신의 답변에 추가하십시오. 포트가있는 줄을 제외하라는 제안은 이미 주석에 나와 있으며 정확한 명령을 작성했습니다.
aragaer 2013

3
파일에 CRLF 종결자가 있으면 :80다음 줄의 시작 부분 에이 추가됩니다. dos2unix필요한 경우 먼저 파일에서 사용하십시오 .
djnz0feh

1
-n필요? 대부분의 사용자에게는 그렇지 않습니다.
jimh

16

sed 명령 의 간결한 버전 :

sed -i s/$/:80/ file.txt

설명:

  • sed s tream ed itor
    • -i i n-place (파일 편집)
    • s s ubstitution 명령
    • /replacement_from_reg_exp/replacement_to_text/ 성명서
    • $줄의 끝과 일치 ( replacement_from_reg_exp )
    • :80모든 줄의 끝에 추가 할 텍스트 ( replacement_to_text )
  • file.txt 파일 이름


12

동일한 파일에서 각 줄의 끝에 텍스트를 추가하려면 -i매개 변수 를 사용할 수 있습니다 . 예를 들면 다음과 같습니다.

sed -i'.bak' 's/$/:80/' foo.txt

그러나 -i옵션은 비표준 Unix 확장이며 모든 운영 체제에서 사용하지 못할 수 있습니다.

따라서 ex( vi -e/ 와 동일) 사용을 고려할 수 있습니다 vim -e.

ex +"%s/$/:80/g" -cwq foo.txt

:80각 줄에 추가 되지만 때로는 빈 줄에 추가 할 수 있습니다.

따라서 더 나은 방법은 행에 실제로 숫자가 포함되어 있는지 확인한 다음 추가하는 것입니다. 예를 들면 다음과 같습니다.

ex  +"g/[0-9]/s/$/:80/g" -cwq foo.txt

파일 형식이 더 복잡한 경우 [0-9].


1

텍스트 편집기를 사용하여 ^M각 줄 끝에서 (control-M 또는 캐리지 리턴)을 확인합니다. 먼저 그것들을 제거한 다음 줄 끝에 추가 텍스트를 추가해야합니다.

sed -i 's|^M||g' ips.txt
sed -i 's|$|:80|g' ips.txt

0
  1. 역 참조 기술을 사용하여이를 수행 할 수도 있습니다.

    sed -i.bak 's/\(.*\)/\1:80/' foo.txt
    
  2. 다음과 같이 awk와 함께 사용할 수도 있습니다.

    awk '{print $0":80"}' foo.txt > tmp && mv tmp foo.txt
    

-1

sed -i 's / $ /, / g'foo.txt

나는 출력 끝에 쉼표를 추가하기 위해 이것을 자주 수행하므로 Python (또는 선호하는 언어) 배열에 쉽게 복사하여 붙여 넣을 수 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.