小编mbi*_*ras的帖子

如何使用 sed 删除所有 HTML 标签?

我发现了一个非常棒的教程,解释了一些实际sed示例。

最后一个(编号 10)可以在下面看到:

$ sed -e 's/<[^>]*>//g'
This <b> is </b> an <i>example</i>.
This  is  an example.
Run Code Online (Sandbox Code Playgroud)

有人可以帮我解决这个问题吗?

总结一下我所处的位置: 1.我明白:s/x/y/g是一个命令,告诉 sed “x用正则表达式全局替换正则表达式y 2. 似乎-e标志将 sed 置于某种“交互模式”,从man页面:

-e command
             Append the editing commands specified by the command argument to
             the list of commands.
Run Code Online (Sandbox Code Playgroud)

这对我来说似乎很困惑,因为我们似乎没有给出sed“命令列表”,而似乎是给它一个“参数列表”,所以我不确定那个。3.我知道第一个也是唯一<的无非是单个字符正则表达式<,最后一个>无非是单个字符正则表达式> 4.我知道*是告诉 sed 匹配它之前的模式的 0 次或多次出现,在这种情况下,它在括号内;然而,这是我真正困惑的地方:有人可以[^>]*为我解开更多吗?

所以我真正感到困惑的是:

  • 这是怎么回事用-e简单的英语?
  • 这是怎么回事[^>]* …

sed regular-expression

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

如何在 mac 硬件上找到 macOS 和 linux wifi 驱动程序之间的差异?

我从 2013 年底开始在 macbook pro 上运行 macOS,但我正在阅读有关wifi 配置的 Arch wiki并专注于第一部分:

第一部分是识别并确保为您的无线设备安装了正确的驱动程序

我的目标是更好地了解如何计算:

  1. 我机器上的物理wifi设备是什么?
  2. 我需要什么驱动程序才能使其工作?
  3. 它适用于 linux 吗?

首先,我进入“关于此 mac”菜单以获取有关network interface(是否为物理网络设备?)的一些信息:

en0:
  Card Type:  AirPort Extreme  (0x14E4, 0x112)
  Firmware Version: Broadcom BCM43xx 1.0 (7.21.171.68.1a5)
  MAC Address:  60:03:08:8b:96:9c
  Locale: FCC
  Country Code: US
  Supported PHY Modes:  802.11 a/b/g/n/ac
  Supported Channels: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 36, 40, 44, 48, 52, 56, 60, 64, 100, 104, 108, 112, 116, 120, 124, 128, 132, …
Run Code Online (Sandbox Code Playgroud)

osx networking wifi arch-linux network-interface

6
推荐指数
1
解决办法
747
查看次数

我误解了 chmod 770 的哪一部分?

我试图对用户、组和权限进行试验。结果如下:

vagrant@cats:/$ ls -l | grep home
drwxr-xr-x   5 root    admin    4096 Sep 28 05:49 home
vagrant@cats:/$ cat /etc/group | grep "^admin"
admin:x:1002:vagrant
vagrant@cats:/$ cd home
vagrant@cats:/home$ pwd
/home
vagrant@cats:/home$ cd ..
vagrant@cats:/$ sudo chmod 770 home
vagrant@cats:/$ ls -l | grep home
drwxrwx---   5 root    admin    4096 Sep 28 05:49 home
vagrant@cats:/$ cd home
-bash: cd: home: Permission denied
vagrant@cats:/$ ?
Run Code Online (Sandbox Code Playgroud)

我不明白为什么我进不去。用户vagrant在组中admin,组admin拥有目录home,只有所有者和/或组成员才能读取、写入或执行home. 但由于某种原因,我被锁定了。我在这里缺少什么?

users permissions group

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

检查 /var/lib/docker 的磁盘使用情况

我在 ubuntu 服务器上,想要检查内部目录的磁盘使用情况摘要,/var/lib/docker我很困惑为什么我无法/var/lib/docker使用 glob检查内部所有目录的磁盘使用情况*

该目录/var/lib/docker明确存在并且内部有目录:

$ sudo du -s /var/lib/* | grep docker
865644  /var/lib/docker
8   /var/lib/docker-engine
$ sudo du -s /var/lib/docker/*
du: cannot access '/var/lib/docker/*': No such file or directory
$ sudo file /var/lib/docker
/var/lib/docker: directory
$ sudo ls /var/lib/docker | head -n 1
builder
$ sudo du -s /var/lib/docker/builder
20  /var/lib/docker/builder
Run Code Online (Sandbox Code Playgroud)

为什么我收到错误du

du: cannot access '/var/lib/docker/*': No such file or directory
Run Code Online (Sandbox Code Playgroud)

我的错误似乎与非 root 用户有关,因为如果我切换到 root 用户,那么我可以发出以下命令du: …

sudo disk-usage docker

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

AWK END 行为是否将最后一行加载到手册页中的 $0 中?

我阅读了另一个描述如何使用AWK查看最后一行输出的答案

$ seq 42 | awk 'END { print }'
42
Run Code Online (Sandbox Code Playgroud)

因此,当END块运行时,最后一行似乎加载到$0.

这让我感到惊讶,因为第一行没有加载到BEGIN块中:

$ seq 42 | awk 'BEGIN { print }'
#=> blank
Run Code Online (Sandbox Code Playgroud)
  • 这个行为文档在任何地方吗?(我搜索了手册页,但没有找到任何内容)

awk

4
推荐指数
1
解决办法
849
查看次数

使用 /dev/stdin 和 heredoc 从命令行传递文件

我很好奇 heredocs 如何作为文件传递给命令行实用程序背后的理论。

最近,我发现我可以将文件作为 heredoc 传递。

例如:

awk '{ split($0, arr, " "); print arr[2] }' <<EOF
foo bar baz
EOF
bar
Run Code Online (Sandbox Code Playgroud)

出于以下几个原因,这对我来说是有利的:

  • Heredocs 提高了多行输入的可读性。
  • 我不需要记住每个实用程序标志来从命令行传递文件内容。
  • 我可以在给定的文件中使用单引号和双引号。
  • 我可以控制外壳扩展。

例如:

ruby <<EOF
puts "'hello $HOME'"
EOF
'hello /Users/mbigras'

ruby <<'EOF'
puts "'hello $HOME'"
EOF
'hello $HOME'
Run Code Online (Sandbox Code Playgroud)

我不清楚发生了什么。似乎shell认为heredoc是一个内容等于heredoc值的文件。我已经将这种技术与 cat 一起使用,但我仍然不确定发生了什么:

cat <<EOL
hello world
EOL
hello world
Run Code Online (Sandbox Code Playgroud)

我知道cat打印文件的内容,所以大概这个 heredoc 是某种临时文件。

当我“将heredoc传递给命令行程序”时,我对究竟发生了什么感到困惑。

这是使用ansible-playbook的示例。我将实用程序作为 heredoc 传递给剧本;但是它失败了,如使用所示echo $?

ansible-playbook -i localhost, -c local <<EOF &>/dev/null
---
- hosts: all …
Run Code Online (Sandbox Code Playgroud)

command-line bash here-document ansible

4
推荐指数
1
解决办法
5563
查看次数

为什么 bc 除以 0 时退出 0?

我试图想出一种快速且说明性的方法来生成不成功的退出状态,并认为除以零与bc将是一个好主意。

我惊讶地发现,虽然它确实产生了运行时错误,但退出状态仍然是 0:

$ echo 41 + 1 | bc
42
$ echo $?
0
$ echo 42/0 | bc
Runtime error (func=(main), adr=6): Divide by zero
$ echo $?
0
Run Code Online (Sandbox Code Playgroud)
  • 为什么 bc 实用程序不会以非零退出状态失败?

注意:对于我正在使用的快速非零退出状态 return 1

另外,来自shell-tips

$ expr 1 / 0
expr: division by zero
$ echo $?
2
Run Code Online (Sandbox Code Playgroud)

command-line posix bc

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

像 {} 这样的 replstr 是什么?

在文档中xargs提到了该-I标志采用的“replstr”。当我发现要运行以下命令时,我开始阅读有关它的内容fswatch

\n\n
fswatch -0 -e ".*" -i ".rb" . | xargs -0 -n 1 -I {} ruby {}\n
Run Code Online (Sandbox Code Playgroud)\n\n

并开始阅读手册页xargs

\n\n
-I replstr\n        Execute utility for each input line, replacing one or more occurrences of replstr in up to replacements (or 5 if no -R flag is\n        specified) arguments to utility with the entire line of input.  The resulting arguments, after replacement is done, will not be\n        allowed to grow beyond 255 bytes; …
Run Code Online (Sandbox Code Playgroud)

bash xargs string

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

如何在从 STDIN 读取的行之前加上纪元时间戳?

我想将纪元时间添加到一行参数中。我想要的输出是:

$ echo foo bar baz | some_bash_awk_sed_date_program_or_something_else
1491146539 foo bar baz
Run Code Online (Sandbox Code Playgroud)

我得到的实际输出如下所示:

$ echo foo bar baz | awk -f time_stamper.awk
1491146539
0 foo bar baz
Run Code Online (Sandbox Code Playgroud)

我的time_stamper.awk

BEGIN { 
OFS=" "
printf "%s ", system("date +'%s'")
}
{ print }
Run Code Online (Sandbox Code Playgroud)

我认为领先0来自date +'%s'. 我期待设置OFS=" "至少会返回1491146539 0 foo bar baz将换行符更改为空格。

关于我当前尝试的一些问题:

  • 我使用OFS 内置变量有什么问题?
  • 为什么0打印在前面foo bar baz

更重要的是,我不确定它是否awk适合这项工作。也许我应该使用seddate或其他一些实用程序。 …

bash awk text-processing date

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

如何替换“$0”但保存旧值?

我试图将所有以“m”开头的文件重命名为相同的名称,除了第一个字符(或在本例中为“m”)被删除。

我的策略是:

  1. 列出所有文件,使用 ls
  2. 过滤我想要的那些 egrep
  3. 在我想要的字符串旁边生成我不想要的字符串,用空格分隔awk,例如,mfoo foo
  4. 送入xargsmv mfoo foo

一些问题:

  • 这是一个好策略吗?
  • 什么是更好的?

我被困在第 3 步,下面是我解决问题的方法。

我在以下目录中工作:

$ find .
.
./cat
./mbar
./mbaz
./mfoo
Run Code Online (Sandbox Code Playgroud)

我能够快速获得 1-2:

$ ls | egrep '^m'
mbar
mbaz
mfoo
Run Code Online (Sandbox Code Playgroud)

第 3 步更难。我曾经gsub生成我想要的第二个字符串,但我不确定如何“将它与以空格分隔的原始值粘在一起”:

$ ls | egrep '^m' | awk '{ gsub(/^./, ""); print }'
bar
baz
foo
Run Code Online (Sandbox Code Playgroud)

第 4 步对我来说很有意义,虽然我不确定如何完成第 3 步,所以我还不能完成它。下面是我认为它应该如何工作的一个例子:

$ echo mfoo foo | xargs mv
$ find .
.
./cat
./foo …
Run Code Online (Sandbox Code Playgroud)

command-line grep bash awk

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

为什么我无法 grep tmux 手册页中的 join-pane?

如果我输入man tmux/join-pane我会直接转到我正在寻找的子命令:

在此输入图像描述

但如果我 grep 手册页,那么我什么也得不到:

$ man tmux | grep join-pane
$ echo $?
1
Run Code Online (Sandbox Code Playgroud)

如果我尝试一些不同的东西,那么它确实有效:

$ man tmux | grep 'terminal multiplexer'
     tmux -- terminal multiplexer
     tmux is a terminal multiplexer: it enables a number of terminals to be
Run Code Online (Sandbox Code Playgroud)
  • 这里发生了什么?
  • 为什么我无法 grep tmux 手册页中的 join-pane?

有关我的操作系统和我正在使用的命令的一些详细信息:

$ uname -a
Darwin home.local 17.7.0 Darwin Kernel Version 17.7.0: Thu Jun 21 22:53:14 PDT 2018; root:xnu-4570.71.2~1/RELEASE_X86_64 x86_64
$ grep --version
grep (BSD grep) 2.5.1-FreeBSD
$ man --version
man, …
Run Code Online (Sandbox Code Playgroud)

grep man tmux

0
推荐指数
1
解决办法
188
查看次数