XARGS 또는 FOR를 한 줄에 사용하여 목록을 허용하려고 합니다.URL인수로 파일 이름은 URL이 될 수 없으므로 실패합니다. FOR 및 XARGS를 사용하여 이 작업을 시도했지만 실패했습니다.
$for i in $(cat example.txt);do echo $i > $i; done
bash: http://example.site.com: No such file or directory
bash: https://secureexample.com: No such file or directory
$cat example.txt | xargs -I {} sh -c "echo {} > {}"
sh: 1: cannot create http://example.site.com: Directory nonexistent
sh: 1: cannot create https://secureexample.com: Directory nonexistent
두 번째 발생(출력 파일의 이름)의 인수에서 슬래시를 제거하여 호스트별로 고유한 파일을 얻을 수 있습니까? 예:
http.example.site.com
https.secureexample.com
단일 줄 bash에 대한 나의 지식은 매우 제한적입니다. 슬프게도 그것이 회사가 선호하는 것입니다. 파일 이름에 중괄호를 사용하고 SED, AWK, 심지어 CUT으로 값을 변경해 보았지만 앞서 말했듯이 내 지식은 너무 제한적입니다. 또한 XARGS 및 FOR를 사용하여 여러 인수를 시도했지만 해당 작업을 수행하는 데에도 실패했습니다.
별도의 파일을 만들어 문제를 피할 수있었습니다.URI대신에URL를 입력한 다음 http:// 및 https://를 보완합니다. 이는 파일과 명령이 두 배로 늘어나는 것을 의미합니다. 예:
$cat http_example.txt
example.site.com
secureexample.com
$cat http_example.txt | xargs -I {} sh -c "echo http://{} > {}"
$ls -la
-rw-r--r-- 1 root root 24 Mar 22 08:06 example.site.com
-rw-r--r-- 1 root root 25 Mar 22 08:06 secureexample.com
거기에 있습니까?어느URLS가 있는 파일을 사용하는 동안 한 줄의 bash 명령으로 이 작업을 수행하는 방법은 무엇입니까? 감사합니다!
답변1
while read -r i;do echo "$i">"${i#http*://}";done<example.txt
http(s)://
이렇게 하면 생성 example.site.com
및 파일의 주요 부분이 제거됩니다 secureexample.com
.
는 일치하는 선행 부분 ${i#http*://}
에서 제거하는 구성입니다 ( 는 와일드카드입니다).$i
http*://
*
while read -r i;do echo "$i">"$(echo "$i"|sed 's|://|.|')";done<example.txt
이것은 파일 http.example.site.com
과 https.secureexample.com
.
입력 파일 행 sed
을 .://
.