명령 결과를 가져와 HTML 코드에 저장하는 스크립트가 있습니다.
내가 지금까지 가지고 있는 것은 다음과 같습니다...
#!/bin/bash
list_dir=`ls -t downloads/`
for i in $list_dir
do
#----
# echo "<a href=\"downloads/$i\">$i</a>"
#----attempt 1
#
` sed -n 'H;${x;s/placeholder .*\n/<a href="downloads/$i">$i</a>\
&/;p;}' index.html`
done
"자리 표시자"라고 표시된 html 파일의 내용을 대체하기 위해 for 루프의 결과를 얻으려고 합니다. 자리 표시자 없이 특정 지점 아래에 내용을 삽입하기만 하면 됩니다. 나는 무엇을 해야할지 잘 모르겠습니다.
답변1
매개변수 대체를 사용하면 이스케이프 문제 없이 텍스트를 바꿀 수 있습니다.
output=$(ls -t downloads | while IFS= read -r f; do
echo "<a href=\"downloads/$f\">$f</a>"
done)
html=$(<index.html)
html=${html/placeholder/$output}
echo "$html" > output.html
awk -v
다음을 사용하여 대체 텍스트를 변수로 전달할 수도 있습니다 .
awk -v v="$output" '{sub("placeholder",v);print}' index.html > output.html
또는 자리 표시자 없이 여러 줄 패턴을 바꾸려면 Ruby를 사용하세요.
echo "$output" | ruby -i -e 'print gets(nil).sub(/<a .*<\/a>\n/m, STDIN.read)' index.html
답변2
어떻게든 중간에 출력을 삽입하는 대신 파일의 전체 내용을 바꾸려는 경우 sed
시도 #1은 전체 루프의 출력을 리디렉션하는 경우에 기반한 방법보다 원하는 것에 더 가까울 수 있습니다.
#!/bin/bash
list_dir=`ls -t downloads/`
for i in $list_dir
do
echo "<a href=\"downloads/$i\">$i</a>"
done > index.html
답변3
작은따옴표 안의 변수가 확장되지 않는 sed
등 line 에 여러 가지 문제가 있습니다 .$i
다음 index.html이 주어지면:
<html>
<body>
<!-- placeholder -->
</body>
</html>
sed
중간 파일을 입력/출력 으로 사용해 보십시오 .
#!/bin/bash
list_dir=`ls -t downloads/`
cp index.html out.html
for i in $list_dir
do
sed "s/<!-- placeholder -->/<a href='downloads\/$i'>$i<\/a>\n<!-- placeholde
r -->/" out.html > tmp.html
mv tmp.html out.html
done
cat out.html
물론 파일 이름에 공백이 포함되어 있으면 문제가 발생하지만 이는 또 다른 문제입니다.