Получить значение, когда строка содержит одни и те же разделители несколько раз - PullRequest
0 голосов
/ 10 октября 2019

У меня есть строка ниже в файле с именем common.txt:

common=cn=yahoo,cn=yahoo1,dc=dcontroller,dc=com

Я хочу извлечь значение common в переменной. Попытка этого

common=$(awk -F'=' {'print $2'} common.txt)

не будет работать, так как в строке несколько =. Как извлечь значение common из файла с помощью awk?

Ожидаемый результат:

common=cn=yahoo,cn=yahoo1,dc=dcontroller,dc=com

Ответы [ 4 ]

1 голос
/ 10 октября 2019

Поскольку содержимое файла выглядит в формате переменных bash, почему бы вам просто не сделать:

source common.txt

?

1 голос
/ 10 октября 2019

Самое простое решение, о котором я могу подумать (учитывая, что строка string встречается только 1 раз в строке), также исправляет здесь попытку OP:

awk -F'common=' '{print $2}' Input_file


2-е решение: Использование sub из awk.

awk '{sub(/^common=/,"")} 1' Input_file


3-е решение: Использованиеmatch из awk.

awk 'match($0,/^common=/){print substr($0,RSTART+RLENGTH)}'  Input_file


4-е решение: Использование простого sed метода замены.

sed 's/^common=//' Input_file


5-е решение: Использование sed:

sed 's/common=\(.*\)/\1/' Input_file


6-е решение: С использованием цикла while оболочки, хотя он НЕ может быть быстрым, как вышеописанные решения, добавив его здесь в качестве варианта.

while IFS="=" read line1 line2
do
  echo "$line2"
done < "Input_file"


7-е решение: Использование while loop bash one вместе с заменой процесса.

while read line
do
  echo "${line#*=}"
done < "Input_file"

Для всех выводов команды оберните их в common=$(above anyone command), чтобы сохранить выводв переменную с именем common.

0 голосов
/ 10 октября 2019

Вы можете использовать cut с = в качестве разделителя и печатать все поля, начиная со второго:

$ cut -d= -f2- common.txt
cn=yahoo,cn=yahoo1,dc=dcontroller,dc=com
0 голосов
/ 10 октября 2019

Awk не будет лучшим инструментом на мой взгляд, так как ваш файл не имеет разделенного значения с правильным разделением

Используйте GNU grep:

grep -oP '^common=\K.*' <file>

Вывод:

cn=yahoo,cn=yahoo1,dc=dcontroller,dc=com

Чтобы извлечь его в переменную:

common="$(grep -oP '^common=\K.*' <file>)"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...