Как заменить вкладку символом в файле

данный файл выглядит

CHrIS john herzog 10001 Marketing tim johnson 10002 IT ruth bertha Hendric 10003 HR christ jason hellan 10004 Marketing 

мой код:

 readFile=$1 #error checking to see if the file exists and is not a directory if [ ! -f "$readFile" ] then #echo failed no param passed exit 1 else #reads in the file and stores the information into the variabel var. while read -r var do #echo $var fName=$(echo "$var" | cut -f1 | awk '{print $1}') mName=$(echo "$var" | cut -f2 | awk '{print $2}' | tr "\t" "x") echo $mName done < $readFile fi 

Как я могу получить среднюю вкладку в строке 2 с tim (needs to be an X) johnson 10002 IT чтобы перейти на X?

4 Solutions collect form web for “Как заменить вкладку символом в файле”

Попробуй это:

скажем, содержимое сохраняется в файле «файл»,

 cat file | sed -E 's/ / x/' 

даст

 CHrIS john xherzog 10001 Marketing tim x johnson 10002 IT ruth xbertha Hendric 10003 HR christ jason hellan 10004 Marketing 

Что касается того, зачем писать sed в указанном выше виде, обратитесь к этому

Предполагая, что это {tab} символы в интервалах …

Вы никогда не увидите вкладку в своем awk или tr потому что она уже используется в качестве разделителя полей путем cut .

Похоже, вы пытаетесь заменить пустое поле на x . Если это так, вы можете использовать такие конструкции:

 #!/bin/bash # while IFS= read -r line do first=$(echo "$line" | awk -F$'\t' '{print $1}') middle=$(echo "$line" | awk -F$'\t' '{print $2}') last=$(echo "$line" | awk -F$'\t' '{print $3}') id=$(echo "$line" | awk -F$'\t' '{print $4}') dept=$(echo "$line" | awk -F$'\t' '{print $5}') echo "First is ${first:-x}" echo "Middle is ${middle:-x}" echo "Last is ${last:-x}" echo "Id is ${id:-x}" echo "Dept is ${dept:-x}" echo done 

Мы не можем разделить с IFS=$'\t' read -r first middle last... потому что read разбивается на пробелы пробелов (пробел, табуляция, новая строка), а не отдельные экземпляры. (На самом деле это сложнее, посмотрите на «Разделение слов» на странице руководства, чтобы получить полную информацию.)

Я остался в стороне от использования echo "$line" | cut -f1 echo "$line" | cut -f1 и т. д., потому что, если cut заканчивается, он повторяет последнее, которое он находит.

В качестве альтернативы «$ {middle: -x}» вы можете назначить x переменной, если она не установлена ​​с конструкцией ${middle:=x} . Префикс с командой no-op : если вы хотите, чтобы назначение выполнялось само по себе (а не как побочный эффект какой-либо другой команды):

 : ${middle:=x} echo "The middle is $middle" # Will be 'x' if it was unset 

Предполагая, что файл имеет разделитель табуляции с самого начала:

 $ cat -t file CHrIS^Ijohn^Iherzog^I10001^IMarketing tim^I^Ijohnson^I10002^IIT ruth^Ibertha^IHendric^I10003^IHR christ^Ijason^Ihellan^I10004^IMarketing 

И полагая, что задача состоит в том, чтобы вставить x в любое пустое поле в столбце 2.

 $ awk -F'\t' 'BEGIN { OFS = FS } $2 == "" { $2 = "x" } { print }' file CHrIS john herzog 10001 Marketing tim x johnson 10002 IT ruth bertha Hendric 10003 HR christ jason hellan 10004 Marketing 

Скрипт awk будет использовать вкладки в качестве разделителей ввода и вывода и будет обнаруживать любые пустые поля в столбце 2 и изменять их на x .

Sed

Предполагая, что ваш «sed» понимает escape-последовательности «\ t» «\ n». Есть WAs, если нет. Но это отвлечет от логики кода.

  sed -e ' s/\t/\n/; # 1st field sep => \n , a char sure to not be in PS by definition s/\n\t/\tx\t/; # incase 2nd field empty then we will see the \n\t else not s/\n/\t/; # just incase 2nd fields was nonempty, preceding would fail so deal here ' yourfile 

Perl

 perl -F"\t" -pale '$F[1] || s/^\S+\t(?=\t)/$&x/' yourfile 
  • Как удалить определенный символ после определенного слова
  • Как я могу вырезать персонажа из «Thu Jun 2 08:11:53 PDT 2016», чтобы отображать только 08 11
  • Добавить столбец в таблицу
  • Как удалить символ и пробел из строки
  • Упорядочить текстовый файл одним словом в строке
  • Клуб вместе N последовательных строк в оболочке?
  • Как поменять две группы строк в файле .sql?
  • Группа и итог списка
  • Добавление строки в таблицу
  • Суммирование значений, если значение второго столбца
  • Поиск последнего символа файла и добавление строки после этого?
  • Linux и Unix - лучшая ОС в мире.