grep -i "*" | sed 's/,.*//'运行后显示lookbehind assertion is not fixed length
时间: 2024-03-09 14:44:59 浏览: 16
这是因为在 grep 命令中使用了类似于 "*" 这样的可变宽度的模式,而在 sed 中又使用了 lookbehind 断言,导致出现了类似 "lookbehind assertion is not fixed length" 的错误信息。
具体来说,grep 命令中的 "*" 表示匹配任意数量的字符,而这种模式是可变宽度的,与 lookbehind 断言的固定宽度不兼容。因此,可以尝试使用其他类型的正则表达式模式来替换 "*",或者避免使用 lookbehind 断言。
例如,如果您的目的是在 grep 命令中匹配所有包含逗号的行,并提取第一个逗号之前的内容,可以尝试使用以下命令:
```
grep -i "," | sed 's/\(^[^,]*\),.*/\1/'
```
这个命令首先使用 grep 命令匹配所有包含逗号的行,然后使用 sed 命令提取每行中第一个逗号之前的内容。其中,sed 命令中使用了固定宽度的 lookbehind 断言 "\(^[^,]*\),",它匹配每行中第一个逗号之前的所有字符。
相关问题
grep -i "A" | sed 's/,.//'运行后显示lookbehind assertion is not fixed length
这个错误信息和上面的情况类似,是因为在 grep 命令中使用了类似于 "A" 这样的固定宽度的模式,而在 sed 中又使用了 lookbehind 断言,导致出现了类似 "lookbehind assertion is not fixed length" 的错误信息。
具体来说,sed 命令中的 ",." 表示匹配一个逗号后面的任意一个字符,这种模式也是可变宽度的,与 lookbehind 断言的固定宽度不兼容。因此,可以尝试使用其他类型的正则表达式模式来替换 ",.",或者避免使用 lookbehind 断言。
如果您的目的是在 grep 命令中匹配所有包含大写字母 "A" 的行,并提取每行中第一个逗号之前的内容,可以尝试使用以下命令:
```
grep -i "A" | sed 's/^\([^,]*\),.*/\1/'
```
这个命令首先使用 grep 命令匹配所有包含大写字母 "A" 的行,然后使用 sed 命令提取每行中第一个逗号之前的内容。其中,sed 命令中使用了固定宽度的正向断言 "^\([^,]*\),",它匹配每行中第一个逗号之前的所有字符。
ps -ef|grep %s| grep -v grep|wc -l>>/mnt/%d.txt
这是一个Linux命令,它的作用是查找进程并将进程数量写入指定的文件中。其中%s是要查找的进程名,%d是要写入的文件名。具体命令如下:
```shell
ps -ef | grep <进程名> | -v grep | wc -l >> /mnt/<文件名>.txt
```
解释一下每个部分的含义:
- ps -ef:列出所有进程的详细信息。
- grep <进程名>:查找包含进程名的行。
- grep -v grep:排除包含grep的行,避免将grep进程本身计算在内。
- wc -l:计算行数,即进程数量。
- >> /mnt/<文件名>.txt:将结果追加到指定的文件中。
举个例子,如果要查找名为nginx的进程并将数量写入/mnt/test.txt文件中,命令如下:
```shell
ps -ef | grep nginx | grep -v grep | wc -l >> /mnt/test.txt
```