Существует пара способов сделать это с :s
В зависимости от того, сколько ввода Вас хотят сделать. Самым легким путем является простой поиск и замена:
:%s/find this line/replace with this/
%
будет искать целый файл и заменять все случаи.
Если это очень вводит для Вас, можно дергать целевую строку (yy
) и используйте "
регистр (по умолчанию), вставляя его с Ctrl+r ":
:%s/<ctrl+r><">/replacement/
Или, если у Вас есть копия замещающей строки, можно дергать два в отдельные регистры с "ayy
и "byy
дергать в a
и b
регистры, соответственно (можно использовать любую букву для регистров). Затем используйте Ctrl+r a и Ctrl+r b для вставки их в поля замены и поиск.
Для не переигрывания Bruce но если Вы хотите проверить строки перед заменой их, просто добавьте c
опция:
:%s/find this line/replace with this/c
Иначе только для heck его:
rev input | cut -c2- | rev | cut -c2-
(Примечание: с GNU cut
, это только работает на символы, сделанные только из одного байта (как в Вашем примере)).
Согласно Вам вопрос удаляют последнее и первое слово из входного файла как указано ниже:
sed 's/.$//; s/^.//' inputfile
s/.\(.*\).$/\1/
. Это могло бы быть быстрее в связи с не использованием обратных ссылок, и вопрос действительно упоминал "большие файлы".
– l0b0
10.01.2013, 15:52
time yes | head -n 10000000 | COMMAND >/dev/null
. Я добираюсь rev input | cut -c2- | rev | cut -c2-
→ 0,14 с, sed 's,.\(.*\).$,\1,'
→ 3,38 с; awk '{print substr($0,2,length()-2);}'
→ 3,50 с; sed 's/.$//; s/^.//'
→ 5.09s.
– Gilles 'SO- stop being evil'
11.01.2013, 01:09
sed 's/.\(.*\)./\1/'
кажется, быстрее, чем sed 's/^.\(.*\).$/\1/'
(GNU sed снова). Кроме того, производительность является иждивенцем на локали (интерпретация того, что символ), и sed
реализация (в том отношении, sed от семейной реликвии toolchest значительно быстрее, чем GNU sed).
– Stéphane Chazelas
18.01.2013, 17:00
Существует много возможностей, как всегда
sed 's,.\(.*\).$,\1,g' your_file
,
- sed разделитель, может быть любой другой символ также, учитывая его оставлен, где когда-либо необходимый..
Соответствуйте отдельному символу\(.*\)
- Сгруппируйте остающуюся часть, и это хранится, чтобы быть, получают далее..
Соответствуйте отдельному символу снова$
- Конец строки\1
- произведите текст, подобранный группой вышеg
замените глобально на строке.Можно также сделать это с awk
если Вы предпочитаете
awk '{print substr($0,2,length()-2);}' input.txt > output.txt
tr -d '()[]{}"' < your_file
Это должно работать так хорошо. Это хорошо «перевести» каждый из персонажей ничем (удалить).
Недостатком является то, что он удалит их, если они также не первый / последний символ. Он также пропустит любые окончательные символы, которые вы не перечислите в () [...
.
ssed
или Семейная реликвия toolchestsed
может достигнуть лучшей производительности. – Stéphane Chazelas 18.01.2013, 17:09sed
– ayrton_senna 12.06.2015, 21:22