小编Mar*_*mbo的帖子

在匹配前显示所有行

我想在匹配之前显示所有行,例如不仅是 10、7 或 14 行,如如何在 bash 中的 grep 结果之前/之后获取行中所述?.

我该怎么做?是否包含匹配的行并不重要。

例如,而不是:

... | grep -B 10 -- "foo"
Run Code Online (Sandbox Code Playgroud)

我想要:

... | grep -B -- "foo"
Run Code Online (Sandbox Code Playgroud)

但是这最后的代码不起作用。

command-line grep text-processing

12
推荐指数
3
解决办法
3221
查看次数

标准输入:无效参数

我尝试创建一个安装 Ubuntu 20.04 LTS Desktop 64 位的 UEFI 笔式驱动器。
\n该exFAT分区gpt2包含整个 Ubuntu 20.04 LTS 系统映像。
\nFAT32分区gpt1包含以下文件:

\n
.\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 boot\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 grub\n\xe2\x94\x82\xc2\xa0\xc2\xa0     \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 x86_64-efi\n\xe2\x94\x82\xc2\xa0\xc2\xa0         \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 exfat.mod\n\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 EFI\n    \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 BOOT\n        \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 BOOTX64.EFI\n        \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 grub.cfg\n        \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 grubx64.efi\n        \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 mmx64.efi\n\n5 directories, 5 files\n
Run Code Online (Sandbox Code Playgroud)\n

其中该grub.cfg文件包含以下行:

\n
insmod exfat\nsearch --no-floppy --set=root --fs-uuid 7026-67D5\nconfigfile /boot/grub/grub.cfg\n
Run Code Online (Sandbox Code Playgroud)\n

Secure Boot方法从改为Deployed ModeAudit Mode,可以从该分区的文件中正确调用该分区grub.cfg的默认文件。\n事实上,会出现正确的安装选项。\n选择选项后,无限循环并按下键我意识到原因是一个未指定的错误:,重复了很多次。\n这个错误的原因可能是什么?exfatgrub.cfgFAT32

UbuntuESCstdin: invalid argument

\n …

partitioning boot grub2 uefi 20.04

5
推荐指数
1
解决办法
1万
查看次数

“sed”仅在特定条件下添加空格

我必须在每次出现的 # 之后添加一个空格,只有当 # 位于行首且 # 之后至少有一个不是空格的字符时。例如这段代码:

echo "# ok" | sed "s|^#[^ ]|# |g"
Run Code Online (Sandbox Code Playgroud)

# ok按预期返回,但此代码:

echo "#ok" | sed "s|^#[^ ]|# |g"
Run Code Online (Sandbox Code Playgroud)

返回# k并没有# ok像预期的那样。
我如何获得# ok输出?

编辑:

这是解决我的问题的代码,感谢@FedonKadifeli:

echo -e "#ok\n# ok\n #ok\n#ok #ok\n##ok #ok"
Run Code Online (Sandbox Code Playgroud)

返回:

#ok
# ok
 #ok
#ok #ok
##ok #ok
Run Code Online (Sandbox Code Playgroud)

这段代码:

echo -e "#ok\n# ok\n #ok\n#ok #ok\n##ok #ok" | sed -r 's|^#(#*)([^[:space:]#])|#\1 \2|g'
Run Code Online (Sandbox Code Playgroud)

返回:

# ok
# ok
 #ok
# ok #ok
## ok #ok
Run Code Online (Sandbox Code Playgroud)

command-line sed text-processing

3
推荐指数
2
解决办法
306
查看次数

bash perl \z 不起作用

我有这个文本文件或 sdout:

text1
text2
text1
text2
text1
text2
Run Code Online (Sandbox Code Playgroud)

我有这个代码:

perl -pe "s/text2\n\z/text3/s" text.txt #Note the modifier "/s"
Run Code Online (Sandbox Code Playgroud)

我和 \z 希望他明白这是 eof 之前的最后一行,因此我希望:

text1
text2
text1
text2
text1
text3
Run Code Online (Sandbox Code Playgroud)

但它返回:

text1
text3text1
text3text1
text3 #without final newline
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?

bash regex perl

3
推荐指数
1
解决办法
183
查看次数

如何使用 udisksctl 一次挂载或卸载设备的所有分区?

我需要使用udisksctl. 我尝试了网上已经看到的
经典方法:/dev/sda?*

udisksctl mount -b /dev/sda?*
Run Code Online (Sandbox Code Playgroud)

或者

udisksctl unmount -b /dev/sda?*
Run Code Online (Sandbox Code Playgroud)

/dev/sda?*就我而言相当于/dev/sda1 /dev/sda2

udisksctl仅安装或卸载列出的第一个分区/dev/sda1
如何让它一次挂载或卸载所有分区?

partitioning mount udisks unmount 20.04

3
推荐指数
1
解决办法
2116
查看次数

bash --> perl 命令:只打印替换的文本

我有包含以下内容的文件“test.txt”:

Val1 = '59'
Val2 = '76'
Val3 = '42'
Val4 = '53'
Run Code Online (Sandbox Code Playgroud)

我用这个命令:

perl -pe "s/^Val2 = '(.*)'/\1/" test.txt
Run Code Online (Sandbox Code Playgroud)

我想要:

76
Run Code Online (Sandbox Code Playgroud)

但我得到:

Val1 = '59'
76
Val3 = '42'
Val4 = '53'
Run Code Online (Sandbox Code Playgroud)

bash regex perl

2
推荐指数
1
解决办法
347
查看次数

标签 统计

20.04 ×2

bash ×2

command-line ×2

partitioning ×2

perl ×2

regex ×2

text-processing ×2

boot ×1

grep ×1

grub2 ×1

mount ×1

sed ×1

udisks ×1

uefi ×1

unmount ×1