Как удалить пробелы из выбранных строк

У меня есть небольшая проблема в Linux с удалением пробелов из выделенных строк из моего файла.

Например:

  • Как разобрать таблицу для шаблона, если шаблон содержит пробелы
  • Связывание Установка в разных файловых системах
  • Эквивалент «truss -T» и «truss -U» в Linux?
  • / proc / stat - гость подсчитывается во время пользователя?
  • awk - печать значения столбца без новой строки и добавление запятой
  • Каковы различные способы установки прав доступа к файлам и т. Д. На gnu / linux
  • fhtsqeghcht fhtrfhvfdgn qazxswedcvf fhbchthbvhf plkoijuhygt tfrdcvbhnju 

    и теперь, как я должен удалить пробелы из строк 2, 4 и 5? Кроме того, как это будет искать третью строку?

  • Как предотвратить завершение сценария при выходе из оболочки?
  • ls -l / proc / self | увеличение PID?
  • Сценарии оболочки для журналов базы данных
  • Убрано USB-устройство хранения данных все еще установлено
  • Всегда ли shebang совпадает с каталогом установки интерпретатора?
  • Найти количество дубликатов дескрипторов файлов в Linux
  • 5 Solutions collect form web for “Как удалить пробелы из выбранных строк”

    Использование awk

    Чтобы удалить пробелы из строк 2, 4 и 5:

     $ awk 'NR==2 || NR==4 || NR==5 {gsub(/ /,"");} 1' file fhtsqeghcht fhtrfhvfdgn qazxswedcvf fhbchthbvhf plkoijuhygt tfrdcvbhnju 

    В awk NR – номер строки. Логическое выражение NR==2 || NR==4 || NR==5 NR==2 || NR==4 || NR==5 NR==2 || NR==4 || NR==5 выбирает интересующие вас линии. Команда gsub(/ /,"") удаляет пробелы из этих строк. Условие 1 является критической стенографией awk для печати строки.

    Использование sed

    Чтобы удалить пробелы из строк 2, 4 и 5:

     $ sed '3n; 2,5 s/ //g' file fhtsqeghcht fhtrfhvfdgn qazxswedcvf fhbchthbvhf plkoijuhygt tfrdcvbhnju 

    Здесь мы используем немного другую логику: мы удаляем пробелы для всех строк от 2 до 5, кроме строки 3. Это работает следующим образом: выражение 3n сообщает sed, что, когда дело доходит до строки 3, распечатайте его и перейдите к следующей строке. В противном случае команда `2,5 s / // g сообщает sed удалять пробелы со всех строк от 2 до 5.

    Чтобы удалить все пробелы, а не просто пробелы

     awk 'NR==2 || NR==4 || NR==5 {gsub(/[[:space:]]/,"");} 1' file 

    Или:

     sed '3n; 2,5 s/[[:space:]]//g' file 

    Другой вариант для awk

     awk 'NR~/^[245]$/{$1=$1}1' OFS='' file 

    Вы можете сделать это с помощью оболочки. В некоторых случаях это даже стоило бы этого сделать. Наверное, не часто.

     sh -fc <in >out ' for IFS do read -rl printf %s $l;echo done; exec cat ' -- '' \ '' \ \ 

     fhtsqeghcht fhtrfhvfdgn qazxswedcvf fhbchthbvhf plkoijuhygt tfrdcvbhnju 

    С perl :

     perl -lpe 'grep { /^$.$/ } (2,4,5) and s/\s//g' 

    или с экспериментальным оператором smartmatch :

     perl -lpe '$. ~~ [2,4,5] and s/\s//g' 

    С awk :

     awk 'NR==2 || NR==4 || NR==5{gsub(/\s/, "")} 1' file 

    Вывод :

      fhtsqeghcht fhtrfhvfdgn qazxswedcvf fhbchthbvhf plkoijuhygt tfrdcvbhnju 

    Кто-то должен был правильно представлять «tr», заявить об этом решение, так что:

      tr -d [:space:] 

    ИЛИ

      tr -d [:blank:] 

    Предполагая, что источником текста является файл ich:

      cat ich | tr -d [:space:] 

    Это создает одну строку, без пробела:

    fhtsqeghchtfhtrfhvfdgnqazxswedcvffhbchthbvhfplkoijuhygttfrdcvbhnju

    Если вы хотите сохранить линии, используйте этот вариант:

      cat ./ich | tr -d [:blank:] 

    который производит этот выход (за вычетом дополнительной строки строки между линиями)

    fhtsqeghcht

    fhtrfhvfdgn

    qazxswedcvf

    fhbchthbvhf

    plkoijuhygt

    tfrdcvbhnju

    Блестящие ответы, мои уважаемые сверстники, каждый!

    F.

    Linux и Unix - лучшая ОС в мире.