명령 및 출력 파일 이름에 대한 인수로 URL 사용

명령 및 출력 파일 이름에 대한 인수로 URL 사용

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*://}에서 제거하는 구성입니다 ( 는 와일드카드입니다).$ihttp*://*


while read -r i;do echo "$i">"$(echo "$i"|sed 's|://|.|')";done<example.txt

이것은 파일 http.example.site.comhttps.secureexample.com.

입력 파일 행 sed을 .://.

관련 정보