Как вставить символ в пунктирные линии в файле - PullRequest
0 голосов
/ 08 марта 2020

Например, у меня есть файл с содержанием:

{

  a : "apple"

  b : "orange"

}

{

  a : "meat"

}

Я хочу добавить «_1» во все строки с «a:» и получить результат в виде:

{

  a : "apple_1"

  b : "orange"

}

{

  a : "meat_1"

}

Есть ли какие-либо способы с помощью bash команд

1 Ответ

1 голос
/ 08 марта 2020

Ваш интервал неясен, есть ли у вас "a : ..." или "a: ...". У вас также есть то, что похоже на json, и если это так, вам нужно использовать утилиту с поддержкой json, чтобы убедиться, что результат проверен как действительный json.

Если, однако, это просто текст тогда awk может обработать любой регистр ("a : ..." или "a: ...") для вас, проверив, соответствует ли первое поле (или первое и второе в случае "a : ...") вашему префиксу a:. Затем вы просто добавляете _1 в конец строки, чтобы сохранить начальные пробелы, используя функцию sub на всей строке (например, $0). Во всех случаях строка выводится либо без изменений, либо с добавлением _1, если ваш префикс соответствует.

Вы можете сделать это с помощью:

awk '$1=="a:" || ($1=="a" && $2==":") {sub(/"$/,"_1\"",$0)}1' file

( note: вы можете удалить любую сторону ||, в которой нет необходимости)

Вы можете просмотреть пользователя функции sub в GNU awk - Функции управления строками

Пример использования / Вывод

С вашим входным файлом в file, следующие результаты:

$ awk '$1=="a:" || ($1=="a" && $2==":") {sub(/"$/,"_1\"",$0)}1' file
{

  a : "apple_1"

  b : "orange"

}

{

  a : "meat_1"

}

Использование sed

Вы также можете выполнить sh то же самое с помощью sed (что может быть немного более эффективно в этом случае), используя:

sed '/^\s*a\s:/s/"$/_1"/' file

Посмотрите вещи и дайте мне знать, если у вас есть вопросы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...