for 루프 결과를 html 파일에 삽입 - BASH

for 루프 결과를 html 파일에 삽입 - BASH

명령 결과를 가져와 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

물론 파일 이름에 공백이 포함되어 있으면 문제가 발생하지만 이는 또 다른 문제입니다.

관련 정보