나는 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 매뉴얼을 읽은 후에도 여전히 명령 줄에서 수행하는 방법이 명확하지 않습니까?
나는 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 매뉴얼을 읽은 후에도 여전히 명령 줄에서 수행하는 방법이 명확하지 않습니까?
답변:
다음과 같은 것을 사용해 볼 수 있습니다.
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
sed '/:[0-9]*$/ ! s/$/:80/'
:80
다음 줄의 시작 부분 에이 추가됩니다. dos2unix
필요한 경우 먼저 파일에서 사용하십시오 .
-n
필요? 대부분의 사용자에게는 그렇지 않습니다.
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
파일 이름동일한 파일에서 각 줄의 끝에 텍스트를 추가하려면 -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]
.
역 참조 기술을 사용하여이를 수행 할 수도 있습니다.
sed -i.bak 's/\(.*\)/\1:80/' foo.txt
다음과 같이 awk와 함께 사용할 수도 있습니다.
awk '{print $0":80"}' foo.txt > tmp && mv tmp foo.txt