해당 파일의 각 줄의 끝에 파일 이름을 추가하려면 어떻게해야합니까?

StackOverflow https://stackoverflow.com/questions/309604

  •  08-07-2019
  •  | 
  •  

문제

수백 개의 파일에 대해 다음을 수행해야합니다. 파일의 각 줄 끝에 파일 이름 (공백이 포함될 수있는)의 이름을 추가하십시오.

나에게 이것을 할 수있는 방법이있는 것 같습니다.

sed -e 's/$/FILENAME/' *

어디 FILENAME 현재 파일의 이름을 나타냅니다. 현재 파일 이름을 나타내는 SED 변수가 있습니까? 아니면 Bash, awk 등을 사용하여 다른 솔루션이 있습니까?

도움이 되었습니까?

해결책

나는 그것을 할 수있는 다른 방법이 있다고 확신합니다. 나는 perl을 사용합니다.

perl -p -i -e 's/$/$ARGV/;' *

다른 팁

SED의 일부 버전은 "-내장"인수를 지원하므로 Tyler의 솔루션을 압축 할 수 있습니다.

for i in * ; do 
  sed -e "s/\$/$i/" --in-place "$i" 
done

배쉬 스크립트로 할 수 있습니다

for i in * 
do
  sed -e "s/\$/$i/" "$i" 
done

1 라이너 버전 :

for i in * ; do sed -e "s/\$/$i/" "$i" ; done

편집하다: 당신이 원한다면 바꾸다 새 이름으로 연결된 줄이있는 파일의 내용은 다음을 수행합니다.

TFILE=`mktemp`
for i in * 
do
  sed -e "s/\$/$i/" "$i" > $TFILE
  cp -f $TFILE "$i"
done
rm -f $TFILE
awk '{print $0,FILENAME}' > tmpfile

Bash에서는 다음의 효과에 무언가를 할 것입니다.

for f in *; do echo $f >> $f; done

Tyler가 제안한 방법은 이름의 공간을 허용하기 위해 약간의 수정만으로도 제안했습니다. 그래도 한 라이너를 바라고 ...

(
  OLDIFS=$IFS
  IFS=$'\n'
  for f in *
  do
    IFS=OLDIFS
    sed -e "s/\$/$f/" $f > tmpfile
    mv tmpfile $f
    IFS=$'\n'
  done
)

이것은 당신에게 효과가있을 수 있습니다 :

printf "%s\n" * | sed 's/.*/sed -i "s|$| &|" &/' | bash
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top