나는 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 명령 의 간결한 버전 :
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
파일 이름
답변
sed 's/.*/&:80/' abcd.txt >abcde.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]
.
답변
텍스트 편집기를 사용하여 ^M
각 줄 끝에서 (control-M 또는 캐리지 리턴)을 확인합니다. 먼저 그것들을 제거한 다음 줄 끝에 추가 텍스트를 추가해야합니다.
sed -i 's|^M||g' ips.txt
sed -i 's|$|:80|g' ips.txt
답변
-
역 참조 기술을 사용하여이를 수행 할 수도 있습니다.
sed -i.bak 's/\(.*\)/\1:80/' foo.txt
-
다음과 같이 awk와 함께 사용할 수도 있습니다.
awk '{print $0":80"}' foo.txt > tmp && mv tmp foo.txt
답변
sed -i ‘s / $ /, / g’foo.txt
나는 출력 끝에 쉼표를 추가하기 위해 이것을 자주 수행하므로 Python (또는 선호하는 언어) 배열에 쉽게 복사하여 붙여 넣을 수 있습니다.