Извлечение части определенного столбца в текстовый файл

ffmj0010.09o:FFMJ                                                  MARKER NAME
ffmj0020.09o:BRMU                                                  MARKER NAME

В этом текстовом файле (2 строки и без пробелов между строками) мне нужно извлечь 4 символа после ":" ("FFMJ", "BRMU") и сохранить их в другом текстовом файле. Какую команду мне нужно использовать?

3
задан 19 October 2015 в 18:19

4 ответа

Используя sed:

sed 's/.*:\(.\{4\}\).*/\1/' in > out
  • s: утверждает, чтобы выполнить замену
  • /: останавливается команда / начинает образец
  • .*:: матчи любое количество любого характера до последнего : характер и : характер
  • \(.\{4\}\): матчи и группы 4 происшествия любого характера
  • .*: матчи любое количество любого характера
  • /: останавливается образец / начинает череду замен
  • \1: обратная ссылка заменила первой захваченной группой
  • /: останавливается череда замен / начинает флаги образца

Типовая продукция на файле в качестве примера:

% cat in
ffmj0010.09o:FFMJ MARKER NAME
ffmj0020.09o:BRMU MARKER NAME
% sed 's/.*:\(.\{4\}\).*/\1/' in > out
% cat out
FFMJ
BRMU
3
ответ дан 20 October 2015 в 04:19
  • 1
    Спасибо за ответ. Но когда я выполняю новую таблицу маршрутизации, I' ve получил ответы RTNETLINK: Операция, не разрешенная. – aimbots 11 January 2017 в 19:10

Используя grep:

cat oldFile | grep -o ":[A-Z]*" | grep -o "[A-Z]*" > newFile
cat oldFile |                                         # Read the file
               grep 
                    -o                                # Only give the greped data
                       ":[A-Z]*"                      # Find a : followed by 4
                                                      #  4 capital letters
                                 | grep -o "[A-Z]*"   # Remove the : from that

Тогда эти > newFile продукция к файлу.

На примере:

ffmj0010.09o:FFMJ MARKER NAME
ffmj0020.09o:BRMU MARKER NAME

идет в

FFMJ
BRMU
1
ответ дан 20 October 2015 в 04:19

Используя awk и несколько разделителей

awk -F'[: ]' '{print $2}' in > out
<час>

Пример

$ cat in
ffmj0010.09o:FFMJ                                                  MARKER NAME
ffmj0020.09o:BRMU                                                  MARKER NAME

$ awk -F'[: ]' '{print $2}' in 
FFMJ
BRMU
3
ответ дан 20 October 2015 в 04:19
  • 1
    как выполниться: IP маршрут добавляет таблицу rt2 10.10.0.0/24 dev eth1 src 10.10.0.10, не имея ОШИБКИ: RTNETLINK отвечает: Операция, не разрешенная – aimbots 12 January 2017 в 18:16

Если Вы уверены, что хотите точно 4 знака перед концом линии, Вы можете сделать:

grep -Eo '.{4} 

Иначе Вы можете пойти для grep с PCRE, чтобы получить все знаки после : до конца линии:

grep -Po '.*:\K[^:]+ 

Вы можете также использовать bash расширение параметра:

while IFS= read -r line; do echo "${line##*:}"; done <file.txt >out.txt

ОТРЕДАКТИРУЙТЕ:

, Поскольку @kos указал, что я, возможно, неправильно понял вопрос, если Вы хотите точно 4 знака после :, Вы можете сделать:

grep -Po '.*:\K.{4}' file.txt >out.txt
file.txt >out.txt

Вы можете также использовать bash расширение параметра:

while IFS= read -r line; do echo "${line##*:}"; done <file.txt >out.txt

ОТРЕДАКТИРУЙТЕ:

, Поскольку @kos указал, что я, возможно, неправильно понял вопрос, если Вы хотите точно 4 знака после :, Вы можете сделать:

grep -Po '.*:\K.{4}' file.txt >out.txt
file.txt >out.txt

Иначе Вы можете пойти для grep с PCRE, чтобы получить все знаки после : до конца линии:

grep -Po '.*:\K[^:]+ 

Вы можете также использовать bash расширение параметра:

while IFS= read -r line; do echo "${line##*:}"; done <file.txt >out.txt

ОТРЕДАКТИРУЙТЕ:

, Поскольку @kos указал, что я, возможно, неправильно понял вопрос, если Вы хотите точно 4 знака после :, Вы можете сделать:

grep -Po '.*:\K.{4}' file.txt >out.txt
file.txt >out.txt

Вы можете также использовать bash расширение параметра:

while IFS= read -r line; do echo "${line##*:}"; done <file.txt >out.txt

ОТРЕДАКТИРУЙТЕ:

, Поскольку @kos указал, что я, возможно, неправильно понял вопрос, если Вы хотите точно 4 знака после :, Вы можете сделать:

grep -Po '.*:\K.{4}' file.txt >out.txt
3
ответ дан 20 October 2015 в 04:19
  • 1
    удостоверьтесь, что Вы используете право ip addresses для Вашего настроенного собственного – George Udosen 12 January 2017 в 21:32

Другие вопросы по тегам:

Похожие вопросы: