v_sadist
@v_sadist
DevOps engineer

Как отработать этот массив в цикле Bash?

Всем привет!

Есть файл со списком типа:

First_word@First_line
Second_word@Second_line
Third_word@Third_line

Идея следующая: в цикле while read line проверять что переменная равна первой части строки (та, что до "@"), тогда выполнить действие со второй частью строки (та, что после "@")

То есть:
while read line
do
if $1 == "$line" # <<<< вот здесь должна быть проверка части строки, но непонятно как реализовать
then 
echo "Second part of the line" #<<<< а вот здесь вывод второй части строки, но также непонятно как реализовать


Это можно сделать через AWK или SED но нет ли регулярных выражений под это дело (на крайний случай отgrepать это)?
Заранее спасибо.
  • Вопрос задан
  • 104 просмотра
Решения вопроса 1
Можно решить через ${VAR#*@} и ${VAR%@*}, либо ${VAR##*@} и ${VAR%%@*}
первый попавшийся символ @, либо по последний.
#!/bin/bash

AAA="First_word@First_line\nSecond_word@Second_line\nThird_word@Third_line"

echo -e "${AAA}" | while read line; do
    if [ "$1" == "${line%@*}" ]; then
        echo "Second part of the line: ${line#*@}"
    fi
done
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@abcd0x00
Можно и sed
[guest@localhost ~]$ text="word1@line1\nword2@line2\nword3@line3\nword2@line4"
[guest@localhost ~]$ v="word2"
[guest@localhost ~]$ 
[guest@localhost ~]$ echo -e "$text"
word1@line1
word2@line2
word3@line3
word2@line4
[guest@localhost ~]$ echo -e "$text" | sed -n '/^'$v'@/ s/^.*@//p'
line2
line4
[guest@localhost ~]$
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

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