вставить символ в начало указанной строки в файле

Это новая функция Coreutils ls.

Из документации info:

'-N'
'--literal'
'--quoting-style=literal'

Не заключать имена файлов в кавычки. Однако, при использовании 'ls' неграфические символы все равно печатаются как вопросительные знаки, если вывод является терминалом и вы не указали опцию '--show-control-chars'.

4
12.01.2017, 10:04
7 ответов

Ваш вопрос непонятен. Предположим, вы хотите закомментировать конкретный текст:

sed -i.bak 's/^\(Hellow2\)$/#\1/'

Это произведет замену на месте любых строк, которые точно соответствуют строке «Hellow2», и заменит их на #, за которым следует строка, которая была сопоставлена.

4
27.01.2020, 20:49

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

awk '{if ($0 == "Hellow2") print "#"$0; else print $0}' yourfile > outputfile
0
27.01.2020, 20:49

Чтобы вставить # в строке со словом Hellow2 , вы можете использовать sed следующим образом:

sed 's/^Hellow2/#&/' input.txt >output.txt

Чтобы вставить # в начало второго строку текста, вы можете использовать sed следующим образом:

sed '2s/.*/#&/' input.txt >output.txt

и будут заменены на все, что соответствует шаблону.

Я избегаю использования sed -i (редактирование на месте), потому что я не знаю, какой sed вы используете, и большинство реализаций sed используют несовместимые способы обработки этого флага.

Вместо этого выполните замену, как указано выше, а затем

mv output.txt input.txt

, если вы хотите заменить исходные данные на результат. Это также дает вам возможность убедиться, что он получился правильно.

Эквивалент awk :

awk '/^Hellow2/ { print "#" $0; next } { print }' input.txt >output.txt

awk 'NR == 2 { print "#" $0; next } { print }' input.txt >output.txt
12
27.01.2020, 20:49
sed -i 's/string/#&' file

строка должна быть введена начиная с

-1
27.01.2020, 20:49

Если вы хотите вставить перед строками со 2 по 4 , вы можете указать диапазон.

sed -i -e '2,4s/^/# /' test.txt

Если вам нужны определенные строки, , а не диапазон , они должны быть в разных выражениях. (например строки 2 и 4, но не 3.)

sed -i -e '2s/^/# /' -e '4s/^/# /' test.txt
2
11.05.2020, 16:37

Общий шаблон для применения команды sк определенным линиям: [2addr]s...Где 2addrпредставляет 0, 1 или 2 адреса. Другими словами, если вы хотите вставить #перед строками, соответствующими шаблону:

sed -e '/pattern/s/^/#/'

Если вы хотите сделать замену в режиме онлайн$n:

sed -e "${n}s/^/#/"  # (This requires that $n be a well formatted number)

Если вы хотите сопоставить диапазон строк от $n до $m:

sed -e "${n},${m}s/^/#/"  # $n and $m must be well formed numbers.  eg '2'

Если вы хотите сопоставить все строки между строкой, соответствующей pattern1, и строкой, соответствующей `шаблону 2:

sed -e '/pattern1/,/pattern2/s/^/#/' 
2
23.07.2020, 17:28

Использование Raku (, ранее известного как Perl _6)

raku -pe 's/^/#/ if $++ == 1;'  yourfile > outputfile

ИЛИ

raku -ne 'state $i; S/^/{"#" if $i++ == 1}/.put;'  yourfile > outputfile

ИЛИ

raku -ne 'if $++ == 1 {S/^/#/.put;} else {$_.put};'  yourfile > outputfile

Выше приведены решения, закодированные на Raku, члене семейства языков Perl -.

В первом примере используются флаги командной строки autoprinting -peв сочетании со знакомым оператором «small -s» s///. Во втором и третьем примерах используются флаги командной строки -neбез автопечати -в сочетании с оператором «большой -S» S///. Оператор "большой -S" обладает тем свойством, что...«использует ту же семантику, что и оператор s///, за исключением того, что он оставляет исходную строку нетронутой и возвращает результирующую строку...».

Пример ввода:

Hellow1
Hellow2
Hellow3

Пример вывода:

Hellow1
#Hellow2
Hellow3

https://github.com/rakudo/rakudo/wiki/Running-rakudo-from-the-command-line
https://docs.raku.org/syntax/s$SOLIDUS$SOLIDUS$SOLIDUS
https://docs.raku.org/syntax/S$SOLIDUS$SOLIDUS$SOLIDUS
https://raku.org

0
15.11.2021, 05:13

Теги

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