Это новая функция Coreutils ls
.
Из документации info:
'-N'
'--literal'
'--quoting-style=literal'Не заключать имена файлов в кавычки. Однако, при использовании 'ls' неграфические символы все равно печатаются как вопросительные знаки, если вывод является терминалом и вы не указали опцию '--show-control-chars'.
Ваш вопрос непонятен. Предположим, вы хотите закомментировать конкретный текст:
sed -i.bak 's/^\(Hellow2\)$/#\1/'
Это произведет замену на месте любых строк, которые точно соответствуют строке «Hellow2», и заменит их на #, за которым следует строка, которая была сопоставлена.
Вы можете сделать это с помощью awk
:
awk '{if ($0 == "Hellow2") print "#"$0; else print $0}' yourfile > outputfile
Чтобы вставить #
в строке со словом 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
sed -i 's/string/#&' file
строка должна быть введена начиная с
Если вы хотите вставить перед строками со 2 по 4 , вы можете указать диапазон.
sed -i -e '2,4s/^/# /' test.txt
Если вам нужны определенные строки, , а не диапазон , они должны быть в разных выражениях. (например строки 2 и 4, но не 3.)
sed -i -e '2s/^/# /' -e '4s/^/# /' test.txt
Общий шаблон для применения команды 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/^/#/'
Использование 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