удаление первого и последнего символов каждой строки из командной строки

Я пытаюсь удалить первый и последний символы everyline в текстовом файле и сохранить полученную усеченную версию в новом файле. Кто-нибудь имеет представление о том, как это эффективно использовать awk или другие Linux-программы / команды специально для больших файлов?

input.txt

 (s,2,4,5,6) "s,1,5,5,2" {z,0,4,5,3} [y,2,4,5,5] (y,4,4,5,7) (r,20,4,5,7) (e,9,4,5,2) 

Ожидаемый выход.txt

 s,2,4,5,6 s,1,5,5,2 z,0,4,5,3 y,2,4,5,5 y,4,4,5,79 r,20,4,5,7 e,9,4,5,2 

Другой способ просто для этого:

 rev input | cut -c2- | rev | cut -c2- 

(Примечание: с cut GNU он работает только для символов, состоящих только из одного байта (как в вашем примере)).

По вашему вопросу удалите последнее и первое слово из входного файла, как показано ниже:

 sed 's/.$//; s/^.//' inputfile 

Есть много возможностей, как всегда

 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 

Это должно сработать. Это хорошо «перевести» каждого из символов в ничто (удалить).

Недостатком является то, что он удалит их, если они не являются первым и последним символом. Он также пропустит любые конечные символы, которые вы не перечисляете в ()[...