У мене є файл із таким вмістом:
(((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, яка з'явилася ще у версії 7. AT&T Unix. З man look
:
Утиліта вигляду відображає будь-які рядки у файлі, які містять рядок у вигляді префіксу
Результат:
$ look "(" input.txt
(((jfojfojeojfow
(((jfojfojeojfow
Ви можете робити зворотне.
grep -v '^[^(]' file
або
sed '/^[^(]/d' file
Використовуйте для цього команду grep. Якщо припустити, що файл із згаданим вмістом називається t.txt:
user:~$ grep '^(' t.txt
(((jfojfojeojfow
(((jfojfojeojfow
Якщо "--color" як додатковий аргумент, ви навіть можете побачити кольором у терміналі, що відповідає. Ця інструкція також не відповідає порожнім рядкам.
(
, не тільки ті, що починаються з одного.