LinuxForum.Fans
Тема

пропарсить файлик регулярным выражением и извлечь строку

Автор: Burger 7 сообщений 3524 просмотров
#372251

Здравстуйте!
Как пропарсить файл,который содержит следующие строки:


...
/dev/sda1 /logs ext4 ro,relatime,errors=remount-ro,user_xattr,barrier=1,data=ordered 0 0
/dev/sdb2 /old/logs/data ext4 ro,relatime,errors=remount-ro,user_xattr,barrier=1,data=ordered 0 0
/dev/sdb1 /temp/root/logs ext4 ro,relatime,errors=remount-ro,user_xattr,barrier=1,data=ordered 0 0
...

Паттерны: /logs и ro,

Интересует регексп, который сможет выдать именно первую строку из примера.
Чем это лучше делать и как?

#372275

Вот вам на выбор:
[console]$ cat file
/dev/sda1 /logs ext4 ro,relatime,errors=remount-ro,user_xattr,barrier=1,data=ordered 0 0
/dev/sdb2 /old/logs/data ext4 ro,relatime,errors=remount-ro,user_xattr,barrier=1,data=ordered 0 0
/dev/sdb1 /temp/root/logs ext4 ro,relatime,errors=remount-ro,user_xattr,barrier=1,data=ordered 0 0

$ grep " /logs.* ro" file
/dev/sda1 /logs ext4 ro,relatime,errors=remount-ro,user_xattr,barrier=1,data=ordered 0 0

$ grep "[[:space:]]/logs.*[[:space:]]ro" file
/dev/sda1 /logs ext4 ro,relatime,errors=remount-ro,user_xattr,barrier=1,data=ordered 0 0

$ sed -n '/[[:space:]]\/logs.*[[:space:]]ro/p' file
/dev/sda1 /logs ext4 ro,relatime,errors=remount-ro,user_xattr,barrier=1,data=ordered 0 0

$ awk '{if ($0~/[[:space:]]\/logs.*[[:space:]]ro/) {print $0}}' file
/dev/sda1 /logs ext4 ro,relatime,errors=remount-ro,user_xattr,barrier=1,data=ordered 0 0
[/console]

#372285
"Burger" написал:
/dev/sda1 /logs ext4 ro,relatime,errors=remount-ro,user_xattr,barrier=1,data=ordered 0 0
/dev/sdb2 /old/logs/data ext4 ro,relatime,errors=remount-ro,user_xattr,barrier=1,data=ordered 0 0
/dev/sdb1 /temp/root/logs ext4 ro,relatime,errors=remount-ro,user_xattr,barrier=1,data=ordered 0 0

[console]$ sed -n 's~\s/logs.*ro~&~p'
/dev/sda1 /logs ext4 ro,relatime,errors=remount-ro,user_xattr,barrier=1,data=ordered 0 0
[/console]\s значит "пробельный символ".

#372286

"allez" написал:
[[:space:]]
ну можно и так записать \s
#372300
"drBatty" написал:
ну можно и так записать \s

Согласен, это я в спешке недоглядел малость. :)

#372302

"allez" написал:
[[:space:]]ro
вангую, что ТС хотел
text
\<ro\>
#373309
Burger написал:
Здравстуйте!
Как пропарсить файл,который содержит следующие строки:


...
/dev/sda1 /logs ext4 ro,relatime,errors=remount-ro,user_xattr,barrier=1,data=ordered 0 0
/dev/sdb2 /old/logs/data ext4 ro,relatime,errors=remount-ro,user_xattr,barrier=1,data=ordered 0 0
/dev/sdb1 /temp/root/logs ext4 ro,relatime,errors=remount-ro,user_xattr,barrier=1,data=ordered 0 0
...

Паттерны: /logs и ro,

Интересует регексп, который сможет выдать именно первую строку из примера.
Чем это лучше делать и как?

text
while (<>) {
   if #/logs .* \b ro , # {
       some code;
   }
}
Войдите или зарегистрируйтесь, чтобы ответить.