我发现了一个非常棒的教程,解释了一些实际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简单的英语?[^>]* …我从 2013 年底开始在 macbook pro 上运行 macOS,但我正在阅读有关wifi 配置的 Arch wiki并专注于第一部分:
第一部分是识别并确保为您的无线设备安装了正确的驱动程序
我的目标是更好地了解如何计算:
首先,我进入“关于此 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) 我试图对用户、组和权限进行试验。结果如下:
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. 但由于某种原因,我被锁定了。我在这里缺少什么?
我在 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: …
$ 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)
我很好奇 heredocs 如何作为文件传递给命令行实用程序背后的理论。
最近,我发现我可以将文件作为 heredoc 传递。
例如:
awk '{ split($0, arr, " "); print arr[2] }' <<EOF
foo bar baz
EOF
bar
Run Code Online (Sandbox Code Playgroud)
出于以下几个原因,这对我来说是有利的:
例如:
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) 我试图想出一种快速且说明性的方法来生成不成功的退出状态,并认为除以零与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)
注意:对于我正在使用的快速非零退出状态 return 1
另外,来自shell-tips:
$ expr 1 / 0
expr: division by zero
$ echo $?
2
Run Code Online (Sandbox Code Playgroud) 在文档中xargs提到了该-I标志采用的“replstr”。当我发现要运行以下命令时,我开始阅读有关它的内容fswatch:
fswatch -0 -e ".*" -i ".rb" . | xargs -0 -n 1 -I {} ruby {}\nRun Code Online (Sandbox Code Playgroud)\n\n并开始阅读手册页xargs
-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) 我想将纪元时间添加到一行参数中。我想要的输出是:
$ 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适合这项工作。也许我应该使用sed,date或其他一些实用程序。 …
我试图将所有以“m”开头的文件重命名为相同的名称,除了第一个字符(或在本例中为“m”)被删除。
我的策略是:
lsegrepawk,例如,mfoo fooxargs到mv 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) 如果我输入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)
有关我的操作系统和我正在使用的命令的一些详细信息:
$ 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) bash ×4
awk ×3
command-line ×3
grep ×2
ansible ×1
arch-linux ×1
bc ×1
date ×1
disk-usage ×1
docker ×1
group ×1
man ×1
networking ×1
osx ×1
permissions ×1
posix ×1
sed ×1
string ×1
sudo ×1
tmux ×1
users ×1
wifi ×1
xargs ×1