1.txt에 다음이 있습니다.
https://www.google.se/
https://www.bing.com/
URL=$(grep ".*" ./1.txt) | sed "s/$/\">${URL}/" ./1.txt > ./2.txt
2.txt를 입력합니다.
https://www.google.se/">
https://www.bing.com/">
2.txt에 원합니다:
https://www.google.se/">https://www.google.se/
https://www.bing.com/">https://www.bing.com/
답변1
데이터를 변수에 저장할 이유가 없는 것 같습니다.
awk -v OFS='">' '{ print $0, $0 }' 1.txt >2.txt
이렇게 하면 원하는 작업을 수행할 수 있습니다. 즉, ">
각 줄의 끝에 두 문자를 삽입하고 그 뒤에 줄의 원래 내용을 삽입하는 것입니다. 이 코드에서는 행을 새 필드로 출력하여 이를 수행합니다. 출력 필드 구분 기호가 OFS
자동으로 그 사이에 삽입됩니다. 값은 명령줄에서 OFS
설정됩니다 .">
또는 다음을 사용하십시오 sed
.
sed 's/\(.*\)/\1">\1/' 1.txt >2.txt
이는 캡처 그룹을 사용하여 전체 행을 캡처합니다. 그런 다음 이는 캡처된 비트, string ">
및 캡처된 비트로 다시 대체됩니다.
의견에서 지적했듯이 더 짧은 변형은
sed 's/.*/&">&/' 1.txt >2.txt
&
명령의 대체 부분 에 있는 경우 s
입력 비트는 표현식과 일치하는 비트로 대체됩니다. 표현식은 완전한 행이 있고 .*
행 이 중간에 두 번 삽입된다는 것입니다.&
&">&
">
당신의 파이프라인,
URL=$(grep ".*" ./1.txt) | sed "s/$/\">${URL}/" ./1.txt > ./2.txt
왼쪽과 오른쪽이 서로 독립적으로 실행되기 때문에(그리고 둘 사이에는 통신이 없기 때문에) 별 의미가 없습니다. 표현식의 값은 $URL
비어 있습니다 sed
.
혹시 사용해보신 분이라면
URL=$(grep ".*" ./1.txt); sed "s/$/\">${URL}/" ./1.txt >./2.txt
이는 다음과 같습니다.
URL=$(<./1.txt); sed "s/$/\">${URL}/" ./1.txt >./2.txt
이 명령은 각 줄의 끝에 변수의 전체 내용(전체)을 sed
삽입 하려고 시도합니다. 또한 값에 명령 구분 기호를 방해하는 여러 문자가 포함되어 있기 때문에 실패합니다 .$URL
1.txt
/
/
s