IT

Bash에서 파일의 각 줄

lottoking 2020. 8. 16. 21:30
반응형

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

나는 awk. 열이 하나만있는 경우를 사용 $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 (laminate) 유틸리티가이를 수행 할 수 있습니다. 예를 들면 다음과 같습니다.

$ lam filename -s "string after each line"

  1. 순수 POSIX 쉘:sponge

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

    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, headwc:

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

    앞에 문자 paste삽입합니다 .$suffix

물론 다른 답변과 마찬가지로 sponge나중에 mv원래 파일 이름 위에 임시 파일로 바꿀 수 있습니다 ...


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

반응형