Как извлечь строку между начальным и конечным шаблонами с помощью sed AWK?

When reading a file line by line, if a command inside the loop also reads stdin, it can exhaust the input file.

Продолжить чтение здесь:Bash FAQ 89

Таким образом, код должен выглядеть так:

find. -name '*.m4a' -print0 | while read -d '' -r file; do
  ffmpeg -i "$file" -n -acodec libmp3lame -ab 128k "${file%.m4a}.mp3" < /dev/null
done
0
26.03.2020, 12:35
4 ответа

Сsed

 sed 's/\(.*\)>\(.*\)<\(.*\)/\2/g' domain.txt
0
19.03.2021, 02:32

С pythonиBeautifulSoup:

python -c '
from bs4 import BeautifulSoup
f = open("domain.txt", "r")
soup = BeautifulSoup(f.read(),"html.parser")
for span in soup.find_all("span"):
  print(span.string)
'

Возможно, это будет немного излишне для вашей простой задачи, но будет работать намного лучше и будет проще в более сложных задачах, например. если у вас другой html, например:

<span>
 aghahan.com
</span>
<span>
 pouyamannequin.com
</span>
0
19.03.2021, 02:32

Поскольку каждая строка начинается с <span>и заканчивается</span>:

sed 's|<span>\(.*\)</span>|\1|' domain.txt

Вы также можете сделать это с помощью awk, установив разделитель полей как <или >и распечатав третий столбец:

awk -F '[<>]' '{print $3}' domain.txt

Выход:

aghahan.com
pouyamannequin.com

Это самый простой способ, которым это можно сделать, и он также будет работать, если в конце строк есть пробелы.

1
19.03.2021, 02:32
awk -F ">" '{print $2}' filename| sed "s/<.*//g"

выход

aghahan.com
pouyamannequin.com
0
19.03.2021, 02:32

Теги

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