У меня есть файл со следующим содержанием:
(((jfojfojeojfow
//
hellow_rld
(((jfojfojeojfow
//
hellow_rld
Как я могу извлечь каждую строку, которая начинается с круглых скобок?
У меня есть файл со следующим содержанием:
(((jfojfojeojfow
//
hellow_rld
(((jfojfojeojfow
//
hellow_rld
Как я могу извлечь каждую строку, которая начинается с круглых скобок?
Ответы:
Вот bash
один вкладыш:
while IFS= read -r line; do [[ $line =~ ^\( ]] && echo "$line"; done <file.txt
Здесь мы читаем каждую строку ввода, и если строка начинается с (
, строка печатается. Основной тест сделан [[ $i =~ ^\( ]]
.
Использование python
:
#!/usr/bin/env python2
with open('file.txt') as f:
for line in f:
if line.startswith('('):
print line.rstrip()
Здесь line.startswith('(')
проверяется, начинается ли строка с (
, если это так, то строка печатается.
awk '/^\(/' testfile.txt
Результат
$ awk '/^\(/' testfile.txt
(((jfojfojeojfow
(((jfojfojeojfow
Как питон однострочный:
$ python -c 'import sys;print "\n".join([x.strip() for x in sys.stdin.readlines() if x.startswith("(")])' < input.txt
(((jfojfojeojfow
(((jfojfojeojfow
Или в качестве альтернативы:
$ python -c 'import sys,re;[sys.stdout.write(x) for x in open(sys.argv[1]) if re.search("^\(",x)]' input.txt
look
это одна из классических, но малоизвестных утилит Unix, появившаяся еще в AT & T Unix версии 7. От man look
:
Утилита look отображает любые строки в файле, которые содержат строку в качестве префикса
Результат:
$ look "(" input.txt
(((jfojfojeojfow
(((jfojfojeojfow
Вы можете сделать обратное.
grep -v '^[^(]' file
или
sed '/^[^(]/d' file
Используйте команду grep для этого. Предполагая, что файл с указанным содержимым называется t.txt:
user:~$ grep '^(' t.txt
(((jfojfojeojfow
(((jfojfojeojfow
С '--color' в качестве дополнительного аргумента вы можете даже увидеть в терминале цвет, что соответствует. Эта инструкция также не соответствует пустым строкам.
(
не только те, которые начинаются с одной.