根据https://www.geeksforgeeks.org/rev-command-in-linux-with-examples/
Linux 中的 rev 命令用于按字符反转行。
例如
wolf@linux:~$ rev
Hello World!
!dlroW olleH
Run Code Online (Sandbox Code Playgroud)
rev在现实生活中应用的例子是什么?
为什么我们需要反向字符串?
根据https://www.thegeekstuff.com/2011/01/iptables-fundamentals/
IPTables 有以下 4 个内置表。
过滤器、NAT、Mangle 和原始表
查看所有这些表的 iptables 命令是什么?
ip a 产生一堆 IP 地址和接口状态
有了awk '/inet / {print $2}',我设法获得了 IP 和子网
wolf@linux:~$ ip a | awk '/inet / {print $2}'
127.0.0.1/8
10.10.0.1/24
10.10.1.1/24
wolf@linux:~$
Run Code Online (Sandbox Code Playgroud)
然后,我将它通过管道传输到另一个 awk 以删除 CIDR 表示法。
wolf@linux:~$ ip a | awk '/inet / {print $2}' | awk -F / '{print $1}'
127.0.0.1
10.10.0.1
10.10.1.1
wolf@linux:~$
Run Code Online (Sandbox Code Playgroud)
是否可以在不将 awk 输出通过管道传输到另一个 awk 的情况下执行此操作?
期望输出
wolf@linux:~$ ip a | <awk syntax here without additional piping>
127.0.0.1
10.10.0.1
10.10.1.1
wolf@linux:~$
Run Code Online (Sandbox Code Playgroud) 这是标准输出 ls -ln | nl
wolf@linux:~$ ls -lh | nl
1 total 24
2 -rw-rw-r-- 1 wolf wolf 186 Sep 24 22:18 01.py
3 -rw-rw-r-- 1 wolf wolf 585 Sep 24 22:21 02.py
4 -rw-rw-r-- 1 wolf wolf 933 Sep 24 22:26 03.py
wolf@linux:~$
Run Code Online (Sandbox Code Playgroud)
total 24是否可以从第二行的实际文件/目录开始,而不是从 开始编号?
期望输出
wolf@linux:~$ ls -lh | nl
total 24
1 -rw-rw-r-- 1 wolf wolf 186 Sep 24 22:18 01.py
2 -rw-rw-r-- 1 wolf wolf 585 Sep 24 22:21 02.py
3 -rw-rw-r-- 1 wolf …Run Code Online (Sandbox Code Playgroud) 这个问题基于Ask\xe2\x80\xafUbuntu 上的 \xc2\xa0similar 问题,\n但不是bash,我\xc2\xa0 希望在 中获得类似的输出sh。
bash 中没有问题;它按预期工作。
\nwolf@linux:~$ echo $SHELL\n/usr/bin/bash\nwolf@linux:~$ \nwolf@linux:~$ varA=\'Aug 01\n> Aug 16\n> Aug 26\'\nwolf@linux:~$ \nwolf@linux:~$ varB=\'04:25\n> 03:39\n> 10:06\'\nwolf@linux:~$ \nwolf@linux:~$ echo "$varA $varB"\nAug 01\nAug 16\nAug 26 04:25\n03:39\n10:06\nwolf@linux:~$\nwolf@linux:~$ paste <(printf %s "$varA") <(printf %s "$varB")\nAug 01 04:25\nAug 16 03:39\nAug 26 10:06\nwolf@linux:~$\nRun Code Online (Sandbox Code Playgroud)\n但是,当我在 中尝试类似的命令时sh,我收到以下错误。
wolf@linux:~$ sh\n$ \n$ varA=\'Aug 01\n> Aug 16\n> Aug 26\'\n\n$ varB=\'04:25\n> 03:39\n> 10:06\'\n$ \n$ echo "$varA $varB"\nAug 01\nAug 16\nAug 26 04:25\n03:39\n10:06\n$ \n$ paste <(printf …Run Code Online (Sandbox Code Playgroud) 样本数据
10.1.1.1-10.1.1.3
10.100.100.11-10.100.100.15
Run Code Online (Sandbox Code Playgroud)
Linux 中是否有任何可用的技巧可以将此 ip 扩展为以下格式?
10.1.1.1
10.1.1.2
10.1.1.3
10.100.100.11
10.100.100.12
10.100.100.13
10.100.100.14
10.100.100.15
Run Code Online (Sandbox Code Playgroud)
我知道有在线工具,例如https://techzoom.net/lab/ip-address-calculator/,但我想编写脚本而不是使用在线工具。
让我知道是否有解决方案(与什么工具、bash、python 或任何东西无关)
我知道这是可能的,可能通过使用awk,但我现在想不出解决方案。
我如何将 IP 格式从
10.1.1.1-10.1.1.3
10.100.100.11-10.100.100.31
Run Code Online (Sandbox Code Playgroud)
到
10.1.1.1-3
10.100.100.11-31
Run Code Online (Sandbox Code Playgroud)
这是我对 的尝试cut,但并没有真正按预期工作。
wolf@linux:~$ echo 10.1.1.1-10.1.1.3 | cut -d . -f 1,2,3,4
10.1.1.1-10
wolf@linux:~$
wolf@linux:~$ echo 10.100.100.11-10.100.100.31 | cut -d . -f 1,2,3,4
10.100.100.11-10
wolf@linux:~$
Run Code Online (Sandbox Code Playgroud) 我在这里找到了有趣的讨论并尝试了给出的解决方案 sed
如何在文件开头插入文本?
它适用于普通文本,但不适用于将文本保存在变量中时。
wolf@linux:~$ cat file.txt
1
2
3
wolf@linux:~$
Run Code Online (Sandbox Code Playgroud)
将文本 ( <added text>)添加到文件的开头
wolf@linux:~$ sed -i '1s/^/<added text>\n/' file.txt
wolf@linux:~$
Run Code Online (Sandbox Code Playgroud)
有用!
wolf@linux:~$ cat file.txt
<added text>
1
2
3
wolf@linux:~$
Run Code Online (Sandbox Code Playgroud)
但是,当我用变量尝试它时,它不再起作用。
wolf@linux:~$ var='Text 1'
wolf@linux:~$ echo $var
Text 1
wolf@linux:~$
wolf@linux:~$ cat file.txt
1
2
3
wolf@linux:~$ sed -i '1s/^/"$var"\n/' file.txt
wolf@linux:~$ cat file.txt
"$var"
1
2
3
wolf@linux:~$
Run Code Online (Sandbox Code Playgroud)
而不是"$var",我如何调用$varinsed命令的实际值?我使用 GNU sed4.7:
sed (GNU sed) 4.7 Packaged by Debian …Run Code Online (Sandbox Code Playgroud) 样本数据
wolf@linux:~$ cat data.csv
A,4.4.4.4,4.4.4.5,4.4.4.6,3.3.3.3,3.3.3.4
B,1.1.1.1,1.1.1.1,1.1.1.2,1.1.1.3,3.3.3.3
C,1.1.1.1,1.1.1.1,1.1.1.1,1.1.1.1,1.1.1.1
D,2.2.2.1,2.2.2.1,2.2.2.2,2.2.2.3,2.2.2.4
wolf@linux:~$
Run Code Online (Sandbox Code Playgroud)
此样本中有一些重复数据。例如,有两个3.3.3.3位于 A 行和 B 行。
wolf@linux:~$ egrep 3.3.3.3 data.csv
A,4.4.4.4,4.4.4.5,4.4.4.6,3.3.3.3,3.3.3.4
B,1.1.1.1,1.1.1.1,1.1.1.2,1.1.1.3,3.3.3.3
wolf@linux:~$
Run Code Online (Sandbox Code Playgroud)
现在我只对第一列A,B,C,D以及相关数据感兴趣。
这是我需要查找的 4 个数据。
2.2.2.3
3.3.3.3
4.4.4.4
5.5.5.5
Run Code Online (Sandbox Code Playgroud)
所以,我在 egrep 中使用|和-o
wolf@linux:~$ egrep '2.2.2.3|3.3.3.3|4.4.4.4|5.5.5.5' data.csv
A,4.4.4.4,4.4.4.5,4.4.4.6,3.3.3.3,3.3.3.4
B,1.1.1.1,1.1.1.1,1.1.1.2,1.1.1.3,3.3.3.3
D,2.2.2.1,2.2.2.1,2.2.2.2,2.2.2.3,2.2.2.4
wolf@linux:~$
Run Code Online (Sandbox Code Playgroud)
输出很好,但是里面的数据太多了。我只想要相关数据和第一列。
所以,这是另一个尝试 -o
wolf@linux:~$ egrep -o '2.2.2.3|3.3.3.3|4.4.4.4|5.5.5.5' data.csv
4.4.4.4
3.3.3.3
3,3.3.3
2.2.2.3
wolf@linux:~$
Run Code Online (Sandbox Code Playgroud)
现在的问题是我无法A/B/C/D用这个获得第一列 ( )
下次尝试
wolf@linux:~$ egrep '2.2.2.3|3.3.3.3|4.4.4.4|5.5.5.5' data.csv | cut -d , -f 1
A
B
D
wolf@linux:~$ …Run Code Online (Sandbox Code Playgroud) 我对这个cut命令没有问题。
wolf@linux:~$ echo ab cd ef
ab cd ef
wolf@linux:~$ echo ab cd ef | cut -d ' ' -f 1
ab
wolf@linux:~$ echo ab cd ef | cut -d ' ' -f 2
cd
Run Code Online (Sandbox Code Playgroud)
但是,当我使用这样的不同输入尝试相同的命令时,我没有得到预期的输出。
wolf@linux:~$ ip address show eth0 | grep 'inet '
inet 10.10.10.10/24 brd 10.10.10.255 scope global dynamic eth0
wolf@linux:~$ ip address show eth0 | grep 'inet ' | cut -d ' ' -f 1
wolf@linux:~$ ip address show eth0 | grep 'inet ' …Run Code Online (Sandbox Code Playgroud)