Что означает команда sed 's / [^ 0-9] * // g' в unix?

Es posible que el código fuente de un binario compilado no esté disponible en su sistema.


En OpenBSD(que no es Linux ), el código fuente es para el sistema base completo (incluido el kernel y utilidades comoping)está disponible a través de CVS.

Para un repositorio web -navegable de OpenBSD, consultehttps://cvsweb.openbsd.org/cgi-bin/cvsweb/src/

Las fuentes pingse encuentran ensrc/sbin/ping.


El proyecto NetBSD (nuevamente, no un Linux )tiene un repositorio CVS navegable enhttp://cvsweb.netbsd.org/bsdweb.cgi/src/

La fuente de pingse encuentra ensrc/sbin/pingen ese árbol, como para OpenBSD.


El proyecto FreeBSD (que tampoco es Linux )tiene un repositorio de GitHub enhttps://github.com/freebsd/freebsd

El código fuente de pingse encuentra ensbin/pingen ese árbol.


En estos sistemas BSD, la fuente de las utilidades base y el kernel solo estarán disponibles en el sistema si un usuario ha verificado los repositorios respectivos.

(los Makefiles con las instrucciones de compilación para )paquetes/puertos de herramientas de terceros -se guardan en un repositorio separado para estos tres sistemas operativos, y el código fuente generalmente se obtiene del sitio de distribución principal del herramienta en cuestión si uno decide compilar la herramienta por sí mismo y no usar un paquete/puerto binario listo -.

Consulte la documentación proporcionada por el Unix relevante para saber cómo usar su paquete/sistema de puertos.


Para el código fuente de la utilidad de Linux, primero debe averiguar de qué paquete proviene la utilidad y luego (si es posible )usar el software del administrador de paquetes para obtener el código fuente del paquete. Alternativamente, busque de dónde obtienen el código fuente los mantenedores del paquete cuando crean un paquete binario. Esto sería diferente según el software de administración de paquetes y Linux que esté utilizando.

-3
27.10.2018, 18:28
5 ответов

sed 's/[^0-9]*//g'означает удаление цифр, отличных от -.

Пример

echo alsal34las | sed sed 's/[^0-9]*//g'

получит34

Если вы хотите узнать больше об этом, я предлагаю вам взглянуть на регулярное выражение .

1
28.01.2020, 05:18

@Пурушоттам Кумар,

S = search
g = Global
[^0-9]* = Searching only for the numbers starting with 0-9 in the whole document.
//g = To remove all other content other than numeric.

Чтобы узнать больше, ссылка ниже может вам помочь.

Документация GNU Sed

0
28.01.2020, 05:18

Команда

sed 's/[^0-9]//g'

будет действовать как фильтр, пропускающий только цифры.

Так бы и

sed 's/[^0-9]*//g'

Но из-за gв конце, *больше не нужно (в конце об этом ).

Регулярное выражение [^0-9]означает «любой символ, не являющийся цифрой», а команда seds/[^0-9]//gозначает «заменить любой нецифровой символ -ничем, затем повторить столько раз, сколько возможно». в каждой строке ввода (, т. е. не только первая не -цифра в каждой строке )".

Пример:

$ echo '1-2 1-2? Is this mic on? Hello world! It is 2018!' | sed 's/[^0-9]//g'
12122018

То же, что и команда

tr -dc '0-9\n'

который также удаляет не -цифру в своем вводе (и оставляет новые строки тоже ).


Разница между [^0-9]и [^0-9]*заключается в том, что первый соответствует ровно одному нецифровому символу -, а второй соответствует нулю или более нецифровым символам -. Если вы хотите удалить не -цифры , вы не хотите сопоставлять пустые строки (с «нулем» в «ноль или больше» выше ), поэтому имеет смысл соответствует [^0-9], чем соответствует [^0-9]*.

Флаг gв конце команды sedозначает «глобально», то есть везде в строке, а не только в первом совпадении. Удалив это, вы заметите, что

$ echo '123 testing' | sed 's/[^0-9]*//'
123 testing

соответствует пустому месту перед 1и ничего не заменяет. Более наглядный пример этого:

$ echo '123 testing' | sed 's/[^0-9]*/(&)/'
()123 testing

... и с gв конце:

$ echo '123 testing' | sed 's/[^0-9]*/(&)/g'
()1()2()3( testing)

И тогда у нас есть

$ echo '123 testing' | sed 's/[^0-9]//'
123testing

, который соответствует и заменяет пробел, который не является цифрой -. Более наглядный пример этого:

$ echo '123 testing' | sed 's/[^0-9]/(&)/'
123( )testing

... и с gв конце:

$ echo '123 testing' | sed 's/[^0-9]/(&)/g'
123( )(t)(e)(s)(t)(i)(n)(g)
11
28.01.2020, 05:18

Конечно,

sed 's/[^0-9]*//g

sed— это «редактор потока», для помещения в конец канала (|), перенаправления (, например. <<<,как в sed 's/[^0-9]*//g' <<< 'yourstring123', или используя непосредственно в файле (, т.е.sed 's/[^0-9]*//g' /your/filename).

Команда sв sed относится к «подстановке» для замены символов:

$ sed 's/pattern/replacment/' <<< 'pattern123pattern'
replacement123pattern

Модификатор gв конце означает «глобальный» для замены по всей строке:

$ sed 's/pattern/replacement/g' <<< 'pattern123pattern'
replacement123replacement

[^0-9]*— это регулярное выражение , в котором происходит волшебство для этой команды.

[: begin matching
 ^: NOT these characters:
  0-9: 0 through 9
]: end match
*: match 0 or more occurances

например, [^0-9]*будет соответствовать всему, что не является числом в диапазоне от 0 до 9:

sed 's/[^0-9]*//g':заменить все не-числовые символы пустой строкой ('' ).

$ sed 's/[^0-9]*//g' <<< 'pattern123pattern'
123
$ sed 's/[^0-9]*//g' <<< '123qwertyui456opasdfghjklzxcvbnm789,./;[]=`~012+:"{}<>?345'
123456789012345

Дополнительную информацию см. в man sed(1)и regex(7).

0
28.01.2020, 05:18

Прямой ответ-Он ищет все вхождения числа в буквенно-цифровом тексте и удаляет их.

Пояснение-

 sed 's/[^0-9]*//g' filename

состоит из следующих компонентов.

  1. s/search_pattern/new_pattern/options-заменить (найти и заменить)
  2. []-регулярное выражение.
  3. *-подстановочный знак для 0 или более вхождений.
  4. g-global (опция -заменяет все вхождения в этой строке)

Давайте разберемся с каждым компонентом

1.sed 's/search _шаблон/новый _шаблон/параметры' имя файла

sed 's/akshat/saxena/' файл.txt

Это ищет в каждой строке шаблон «akshat» и заменяет только его первое вхождение на «saxena» в файле с именем file.txt

Здесь мы можем задать такие параметры, как g (global ), i (игнорировать регистр)

 (i) g(global)
         Discussed in point 4.

 (ii)  i - searches ignoring case (case- insensitive search)
  
   sed ' s/life/love/i' file.txt

  Replace life/Life/lIfe/liFe/life/lifE (and many more) with love

2. Регулярное выражение с использованием []

В регулярном выражении можно искать другую комбинацию или диапазон значений.

 sed 's/[Li][Ii][Ff][Ee]/love/g' file

означает, что в шаблоне есть L или l, за которыми следует I или i, за которым следует F или f, за которым следует E или e. Таким образом, становится нечувствительным к регистру -поиск.

Если требуется диапазон, используется дефис (-). [a -z] означает маленькую букву от a до z, то есть все буквенные символы. [0 -9] означает от 0 до 9, то есть все числовые символы.

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

3.*

На его месте может стоять любой символ. Таким образом, в заданном коде любой символ может следовать за регулярным выражением [0 -9]

4. г (глобальный)

   replace all occurrence in that line.
    
       Inorder to replace first occurence in particular line use
           

файл sed 'n s/akshat/$$/'

       where n is the line number. 

Вышеприведенный код заменяет шаблон «akshat» на $$ в n-й строке.

0
28.01.2020, 05:18

Теги

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