해당 파일의 각 줄의 끝에 파일 이름을 추가하려면 어떻게해야합니까?
문제
수백 개의 파일에 대해 다음을 수행해야합니다. 파일의 각 줄 끝에 파일 이름 (공백이 포함될 수있는)의 이름을 추가하십시오.
나에게 이것을 할 수있는 방법이있는 것 같습니다.
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
제휴하지 않습니다 StackOverflow