ffmj0010.09o:FFMJ MARKER NAME
ffmj0020.09o:BRMU MARKER NAME
В этом текстовом файле (2 строки и без пробелов между строками) мне нужно извлечь 4 символа после ":" ("FFMJ", "BRMU") и сохранить их в другом текстовом файле. Какую команду мне нужно использовать?
Используя 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
Используя 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
Используя 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
Если Вы уверены, что хотите точно 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
ip addresses
для Вашего настроенного собственного
– George Udosen
12 January 2017 в 21:32