У меня более 1000 текстовых файлов, я хочу посчитать номер строки в каждом файле и вставить его в первую строку. Я считаю это с помощью wc, но не могу вставить его.
wc -l *.txt |
С помощью GNU sed:
for f in *.txt; do sed -i "1i$(wc -l < "$f")" "$f"; done
1i
вставляет текст перед первой строкой, а -i
приводит к записи изменения в файл на месте.
Пурист, вероятно, использовал бы ed
вместо sed
:
for f in *.txt; do printf '0r !wc -l < %%\n,wq\n' | ed -s "$f"; done
Вы не можете (легко) добавить что-либо к файлу. Поэтому нужен временный файл, например:
for f in *.txt; do
tmpfile=$(mktemp) # temp. file
wc -l "$f" > $tmpfile # store number of lines
cat "$f" >> $tmpfile # append file content
mv "$tmpfile" "$f"; # move temp. file to original file
done