искать строку и отображать только эту строку? - PullRequest
1 голос
/ 17 марта 2012

Можно ли искать строку и, если она существует, оставить только эту строку ... полную строку, а не только строку?У меня есть две переменные данных через запятую.То, что я хотел бы сделать, это перебрать мою переменную $ data и использовать ее в качестве поискового элемента.Затем найдите переменную $ example и, если она найдет совпадение, добавьте некоторые данные только к этой строке.Ниже это добавляет данные к правильной вещи, но это печатает дважды, потому что в этом случае есть два элемента.Было бы неплохо сказать, что ничего не печатать, если это не совпадение, а затем напечатать всю строку

#!/bin/bash
data="item,thing
item2,thing2"

example="a,lot,of,thing,in,this,csv
big,foot,lives,next,to,me,yikes"

echo "$data" | while IFS=, read -r col1 col2
do
echo "$example" | sed "s/$col1/$col2,$col1/i"                                                                            
done

Я пытался сделать col2 ключом массива, но мне это не удалось.Может быть, потому что я на Mac и из того, что я читал, поставляется с более старой версией Bash.

1 Ответ

1 голос
/ 17 марта 2012

Если вы не хотите, чтобы sed печатал, пока не попросите об этом, вы пишете:

... | sed -n "/$col1/{s/$col1/$col2,$col1/i; p}"

Я предполагаю, что суффикс i имеет значение для вашего диалекта sed;это не стандартно.-n означает «не печатать автоматически»./$col1/ ищет шаблон;когда он найден, команды в фигурных скобках выполняются - ваша замещающая операция и затем «печать строки».

Обратите внимание, что ваш шаблон item будет соответствовать nitemare, если он появился в $example.

...