programing

Bash에서는 파일의 각 행 뒤에 문자열을 추가하려면 어떻게 해야 합니까?

stoneblock 2023. 4. 14. 21:05

Bash에서는 파일의 각 행 뒤에 문자열을 추가하려면 어떻게 해야 합니까?

파일 내의 각 행 뒤에 bash를 사용하여 문자열을 추가하려면 어떻게 해야 합니까?sed 명령어를 사용하면 어떻게 할 수 있을까요?

만약 당신이sed를 사용하여 편집 가능-i파라미터:

sed -e 's/$/string after each line/' -i filename

그렇지 않으면 임시 파일을 만들어야 합니다.

typeset TMP_FILE=$( mktemp )

touch "${TMP_FILE}"
cp -p filename "${TMP_FILE}"
sed -e 's/$/string after each line/' "${TMP_FILE}" > filename

나는 더 좋다echo. 순수 bash 사용:

cat file | while read line; do echo ${line}$string; done

사용하는 것을 선호합니다.awk. 컬럼이1개밖에 없는 경우$0또는 마지막 열로 바꿉니다.

일방통행으로

awk '{print $0, "string to append after each line"}' file > new_file

아니면 이거.

awk '$0=$0"string to append after each line"' file > new_file

Lam(라미네이트) 유틸리티가 있으면 다음과 같이 실행할 수 있습니다.

$ lam filename -s "string after each line"
  1. 순수 POSIX 쉘 및:

    suffix=foobar
    while read l ; do printf '%s\n' "$l" "${suffix}" ; done < file | 
    sponge file
    
  2. xargs그리고.printf:

    suffix=foobar
    xargs -L 1 printf "%s${suffix}\n" < file | sponge file
    
  3. 사용.join:

    suffix=foobar
    join file file -e "${suffix}" -o 1.1,2.99999 | sponge file
    
  4. 셸 툴 사용paste,yes,head&wc:

    suffix=foobar
    paste file <(yes "${suffix}" | head -$(wc -l < file) ) | sponge file
    

    주의:paste앞에 탭 문자를 삽입합니다.$suffix.

물론이야.sponge나중에 임시 파일로 대체할 수 있습니다.mv다른 답들과 마찬가지로 원래 파일 이름 위에...

이것은 echo 명령어를 사용하여 파일 내의 각 행 끝에 문자열을 추가하는 것에 불과합니다.

cat input-file | while read line; do echo ${line}"string to add" >> output-file; done

>> 를 추가하면, 그 변경 내용이 출력 파일에 표시됩니다.

SED는 조금 못생겨서 이렇게 우아하게 할 수 있어요.

hendry@i7 tmp$ cat foo 
bar
candy
car
hendry@i7 tmp$ for i in `cat foo`; do echo ${i}bar; done
barbar
candybar
carbar

언급URL : https://stackoverflow.com/questions/2869669/in-bash-how-do-i-add-a-string-after-each-line-in-a-file