То же самое случилось со мной. Я не знаю, почему это произошло, но «lxappearance» (пришлось установить его с помощью apt-get install lxappearance), запущенный с терминала, исправил его для меня.
Ну, используя vim себя:
vim -Nesc 'bufdo call setline(1,"This is the replacement.") | wq' file1 file2 ...
Что это делает:
setline (n, text), ну, это функция, которая устанавливает строку n в text. call необходим для вызова функций. bufdo используется для повторения команды по буферам (без диапазона, она действует на все буферы). wq сохраняет и покидает буфер. Мы должны сделать это, прежде чем переходить к следующему буфере, поэтому эта команда привязана к команде call, используя |. -c cmd выполняет cmd - команда командного режима после загрузки первого буфера. Nes включает несовместимый, бесшумный, ex-mode, что лучше для неинтерактивной обработки.Преимущества:
setline (n, text), ну, это функция, которая устанавливает строку n в text.Несколько других опций:
awk (требуется относительно новая версия GNU awk)$ awk -i inplace -vline="new line" '(FNR==1){print line; next}1;' *.txt
Perl / shell $ for f in *txt; do
perl -i -lne '$.==1 ? print "new line" : print' "$f"
done
Shell / coreutils $ for f in *txt; do
( echo "new line"; tail -n+2 "$f" ) > foo && mv foo "$f";
done
Этот скрипт будет выполнять по вашему желанию, помещая измененные файлы в новый каталог без фактического изменения оригиналов.
d=/tmp/cooked
mkdir $d
for f in * #will match all files in current directory; adjust as desired
do
echo "This is the new 1st line" > /${d}/${f}
sed 1d ${f} >> /${d}/${f}
done
Использование gawk
gawk -i inplace 'FNR==1 {$_="your_replacement"}; {print}' *.txt
Пример
% cat foo.txt
1
2
3
4
% cat bar.txt
1
2
3
4
% gawk -i inplace 'FNR==1 {$_="your_replacement"}; {print}' *.txt
% cat foo.txt
your_replacement
2
3
4
% cat bar.txt
your_replacement
2
3
4
jEdit: Я использую его для массового поиска и замены. Это мощное средство, позволяющее использовать RegEx - Regular Expressions. Вы можете работать с файлами в каталоге, указывать расширения файлов, например, «.html» и т. Д. И вы можете посмотреть на язык изменения кандидата в контексте, в графическом интерфейсе. jEdit отлично.
jEdit доступен через программный центр Ubuntu.
Команды хвоста и кошки сделают это легко:
tail -n +1 $file > tmpfile
cat newfirstline tmpfile >$file
Оберните их в подходящий цикл и, возможно, используйте правильный и праведный временный файл вместо строгого временного имени файла. Я считаю, что bash и другие оболочки имеют синтаксис для создания временных файлов.
Параметр -n хвоста имеет две интерпретации в зависимости от того, имеет ли аргумент знак плюса. Если у него есть знак плюса, значит, это означает, что хвост файла начинается с данного номера строки. В противном случае число - это количество строк, включая последнюю строку, на которую должен выводиться хвост.