Как изменить права доступа к внешнему жесткому диску и получить к нему доступ?

Кажется, нет никаких причин хранить данные в переменной.

awk -v OFS='">' '{ print $0, $0 }' 1.txt >2.txt

Это сделает то, что вы, кажется, хотите сделать, а именно вставит два символа ">в конце каждой строки, за которыми следует исходное содержимое строки. В этом коде это делается путем вывода строки в виде двух новых полей. Разделитель выходных полей OFSбудет вставлен между ними автоматически. Значение OFSустанавливается равным ">в командной строке.

В качестве альтернативы, используяsed:

sed 's/\(.*\)/\1">\1/' 1.txt >2.txt

При этом используется группа захвата для захвата всей строки. Затем он заменяется захваченным битом, строкой ">и снова захваченным битом.

Как указано в комментариях, еще более коротким вариантом будет

sed 's/.*/&">&/' 1.txt >2.txt

Когда &встречается в замещающей части команды s, он будет заменен битом ввода, соответствующим выражению. Выражение .*, поэтому &будет полной строкой,и &">&вставит строку дважды с ">в -между ними.


Ваш конвейер,

URL=$(grep ".*"./1.txt) | sed "s/$/\">${URL}/"./1.txt >./2.txt

не имеет особого смысла, так как левая и правая его части выполняются независимо друг от друга (и между ними нет связи ). Значение $URLбудет пустым в выражении sed.

Если бы вы использовали

URL=$(grep ".*"./1.txt); sed "s/$/\">${URL}/"./1.txt >./2.txt

, что совпадает с

URL=$(<./1.txt); sed "s/$/\">${URL}/"./1.txt >./2.txt

команда sedпопыталась бы вставить полное содержимое переменной $URL(всего1.txt)в конце каждой строки. Это также не удалось бы, так как это значение содержит несколько символов /, которые мешали бы разделителям /команды s.

2
21.10.2021, 18:32
0 ответов

Теги

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