분할 및 연결(입력 파일에서 명령줄 인수 생성)

분할 및 연결(입력 파일에서 명령줄 인수 생성)

서식이 지정된 줄 파일의 텍스트를 연결하는 방법:

line1
line2
...

이런 결과를 얻다

-o line1:1 -o line2:1 ...

다음과 같이 구분 기호를 연결하는 방법을 찾았습니다.

ds=`cat list.txt`
${ds//$'\n'/','}

하지만 각 항목에 접두사를 추가하는 방법을 모르겠습니다.

답변1

생성된 문자열로 무엇을 하려는지에 따라 다릅니다. 이는 명령줄 옵션 세트처럼 보이므로 util.

해결책은 다음과 같습니다 /bin/sh.

#!/bin/sh

listfile=$1

set --
while IFS= read -r line; do
    set -- "$@" -o "$line:1"
done <$listfile

util "$@"

이는 스크립트의 명령줄에 제공된 파일에서 읽고, 해당 파일에서 읽은 각 줄에 대해 포함할 위치 매개변수 -o와 파일에서 읽은 줄의 위치를 ​​설정합니다 LINE:1.LINE

모든 줄을 읽은 후에는 util작성된 명령줄 인수 목록을 사용하여 호출됩니다. 큰따옴표를 사용하여 "$@"구성된 매개변수 목록의 각 개별 항목이 개별적으로 인용되도록 합니다.

bash배열을 사용하여 bash우리가 만든 명령줄 인수를 보관합니다.

#!/bin/bash

listfile=$1

while IFS= read -r line; do
    args+=( -o "$line:1" )
done <$listfile

util "${args[@]}"

위의 두 예 모두에서 인용이 중요합니다. 같은 사실은 우리가개별 항목의 배열(각각 -oLINE:1목록의 항목입니다). 또 다른 방법은단일 문자열 -o LINE1:1 -o LINE2:1 etc., 그러나 as 로 사용하면 인수로 해석되고 로 util "$string"사용하면 토큰화 및 파일 이름 글로빙이 수행되므로 util $string작동하지 않습니다.)

위의 두 스크립트는 모두 다음과 같이 사용됩니다.

$ ./script.sh file

여기서 script.sh는 실행 가능한 스크립트 파일이고 는 file읽을 입력 파일의 이름입니다.

관련된:

답변2

최근 셸(예 bash: )을 사용하여 시도해 보세요.

mapfile -t TMP <file
TMP=(${TMP[@]/%/:1})
echo ${TMP[@]/#/-o }
-o line1:1 -o line2:1 -o line3:1

답변3

sed 's/\(.*\)/-o \1:1/' file.txt | xargs /path/to/command

교체 방법 sed은 다음과 같습니다. 주어진 줄의 텍스트를 "-o the_original_text:1"로 교체합니다. 그런 다음 명령 xargs은 수정된 텍스트 줄을 가져와서 명령줄 인수에 맞게 연결합니다.

답변4

입력 파일:

line1
line2
line3

주문하다:

perl -lpe '$\=" ";$_="-o $_:1"' input.txt

대체 명령:

awk '{ORS=":1 ";print"-o "$0}' input.txt

출력(두 명령 모두 동일):

-o line1:1 -o line2:1 -o line3:1 

관련 정보