변수에 여러 개의 IP 주소가 있습니다. 변수를 파일에 저장하는 중 새줄 - bash
ActiveIPs=192.168.0.1 192.168.0.2 192.168.0.3
나는 줄 바꿈 내가이 어떻게해야합니까
192.168.0.1
192.168.0.2
192.168.0.3
로 구분이 같은 파일에 저장하려면?
변수에 여러 개의 IP 주소가 있습니다. 변수를 파일에 저장하는 중 새줄 - bash
ActiveIPs=192.168.0.1 192.168.0.2 192.168.0.3
나는 줄 바꿈 내가이 어떻게해야합니까
192.168.0.1
192.168.0.2
192.168.0.3
로 구분이 같은 파일에 저장하려면?
어쩌면 너무 기본,하지만이 작동합니다
echo "ActiveIPs= 192.168.0.1 192.168.0.2 192.168.0.3" | cut -d= -f2 | awk '{for (i=1;i<=NF;i++) print $i}'
출력 :
192.168.0.1
192.168.0.2
192.168.0.3
모두 사람 : awk
의 각 필드 사이에 새로운 라인을 인쇄 할 수있는 더 좋은 방법은 무엇입니까? OFS='\n'
으로 시도했지만 작동하지 않았습니다.
질문에 답하려면'echo "ActiveIPs = 192.168.0.1 192.168.0.2 192.168.0.3"| awk 'NR> 1'RS = '''하지만 ActiveIP가 텍스트에 포함되어 있다고 생각하지 않습니다. 변수 이름이 제 대답을 참조하십시오. –
아, RS에 대해서 몰랐어. 나는 그것의 목적이'OF'에 의해 행해졌다고 생각했다 (그들의 차이점은 무엇인가?). 또한 : 이제'ActiveIPs = ...'에 대한 당신의 요지를 보았습니다. 나는 그것이 전체 문자열이라고 생각했습니다. 대답에 +1, @ sudo_O. – fedorqui
필드는 레코드로 구성되고, 레코드는 필드로 구성되며, awk는 레코드를 반복합니다 (기본적으로 레코드는 개행입니다). 레코드가'awk' 인 것을 정의함으로써 반복을 할 것이므로 그렇게하지 않아도됩니다. 'OFS'설정이 http://backreference.org/2010/02/10/idiomatic-awk/ 특별히 자체 할당 섹션에서 작동하지 않는 이유를 이해하려면 –
주 - 즉시 \
히트 NEWLINE- 후 :
$ foo='abc def ghi'
$ echo "${foo// /$'\n'}"
abc
def
ghi
매개 변수 확장을 사용 :
echo $ActiveIPs | sed 's/ /\
/g'
다음은'$ '\ n "'리터럴을 사용하는 단일 행 버전입니다 :'echo $ ActiveIPs | sed 's// \'$ '\ n "'/ g" – mklement0
는 줄 바꿈 모든 공백 문자를 변경하기 위해 매개 변수 확장을 사용하여 내장 된 명령조차도 아닌 새로운 프로세스를 만드는 것을 피합니다.
당신이 할 수있는 경우에, 당신은 배열에 값을 저장 더 나을 것 :
$ input=(192.168.0.100 10.0.0.1 192.168.0.101)
이 방법, 당신은 쉘이 단어를 분할하는 방법을 완벽하게 제어 할 수 있습니다, 당신은 여전히이 없습니다 외부 명령을 호출합니다.
$ SAVE_IFS="$IFS"
$ IFS=$'\n'
$ echo "${input[*]}"
192.168.0.100
10.0.0.1
192.168.0.101
$ ActiveIPs="192.168.0.1 192.168.0.2 192.168.0.3"
$ awk '1' RS=' ' <<< "$ActiveIPs"
192.168.0.1
192.168.0.2
192.168.0.3
Nice; 'RS'(입력 레코드 분리 자) 기술은 알아두면 좋습니다. 한가지주의 할 사항 :'<<<'을 사용하면 출력에 추가로'\ n'이 추가됩니다. 이를 피하기 위해서는'printf "$ ActiveIPs"| awk '1'RS = '''. – mklement0
오타가 있어야합니다. 그 확장의 첫 번째 문자는 따옴표로 묶지 않는 한 공간이 될 수 없습니다. – kojiro
오른쪽, 고맙습니다 – user2266492
여전히 전체 문자열을 인용해야합니다. 그렇지 않으면, 두 번째 토큰의 어떤 것도 * command *로 해석됩니다 (적어도 bash 3.2.48에서는). – mklement0