小编con*_*fin的帖子

主流 *NIX shell 之间的根本区别是什么?

主流 *NIX shell 之间的根本区别是什么,哪些场景可能会促使您使用一种而不是另一种?我知道其中一些可能归结为用户偏好,但我只使用过 Bash,我很想知道另一个 shell 可能有用的地方。

此外,在一个或另一个 shell 下运行时是否对用户编写的 shell 脚本有影响,或者仅仅是更改文件顶部的 shell 的问题?我的直觉说这并不容易。

shell

55
推荐指数
4
解决办法
2万
查看次数

如何在shell中解析数​​百个html源代码文件?

我有几百个 html 源代码文件。我需要<div>从这些文件中的每一个中提取特定元素的内容,因此我将编写一个脚本来遍历每个文件。元素结构是这样的:

<div id='the_div_id'>
  <div id='some_other_div'>
  <h3>Some content</h3>
  </div>
</div>
Run Code Online (Sandbox Code Playgroud)

任何人都可以建议一种方法,通过该方法我可以the_div_id使用 linux 命令行从文件中提取 div以及所有子元素和内容吗?

shell text-processing html

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

使用 sed 处理 bash 变量

bash 变量 LATLNG 在括号中包含纬度和经度值,如下所示

(53.3096,-6.28396)

我想将这些解析为一个名为 LAT 和 LON 的变量,我试图通过 sed 像这样

LAT=$(sed "s/(\(.*\),\(.*\))/\1/g" "$LATLNG")
LON=$(sed "s/(\(.*\),\(.*\))/\2/g" "$LATLNG")

但是,我收到以下错误:

sed: can't read (53.3096,-6.28396): No such file or directory

shell scripting bash sed shell-script

19
推荐指数
2
解决办法
4万
查看次数

为什么 #!/usr/bin/env bash 在我的系统上不起作用?

我在运行一些他们抱怨的安装脚本时遇到了一些问题bad interpreter

所以我做了一个简单的例子,但我无法弄清楚问题是什么,见下文。

#!/usr/bin/env bash
echo "hello"
Run Code Online (Sandbox Code Playgroud)

执行上面的脚本会出现以下错误

[root@ech-10-24-130-154 dc-user]# ./junk.sh
bash: ./junk.sh: /usr/bin/env: bad interpreter: No such file or directory
Run Code Online (Sandbox Code Playgroud)

/usr/bin/env文件存在,见下图:

[root@ech-10-24-130-154 dc-user]# ls -l /usr/bin/env
lrwxrwxrwx 1 root root 13 Jan 27 04:14 /usr/bin/env -> ../../bin/env
[root@ech-10-24-130-154 dc-user]# ls -l /bin/env
-rwxr-xr-x 1 root root 23832 Jul 16  2014 /bin/env
[root@ech-10-24-130-154 dc-user]#
Run Code Online (Sandbox Code Playgroud)

如果我更改脚本以使用常规的shebang,#!/bin/bash它就没有问题。#!/bin/env bash也有效。

允许便携式shebang工作的环境中缺少什么?

ls -lL /usr/bin/env返回ls: cannot access /usr/bin/env: No such file or directory所以我想我需要更改符号链接?我可以指点一下/bin/env …

shell-script environment-variables shebang

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

我怎样才能替代这个shell命令?

我有一个find命令,我想将 GID 列表替换到其中。

这是命令:

find / -follow \( -group 39 -o -acl_group 39 \) -exec ls -ln {} \; 2> $HOME/error.39.log 1> $HOME/results.39.log

我还有一个包含内容的文件:

3  
100005  
21  
7   
Run Code Online (Sandbox Code Playgroud)

如何find依次将文件中的每个条目替换到命令中,以便为每个条目创建单独的输出和错误文件?

shell find files

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

如何在 Linux 中挂载 WD MyBook World 网络驱动器?

我的家庭网络上有一台 WD MyBook World NAS。我目前将此用于 Mac 的 Time Machine 备份,但我也想将其用作运行 Ubuntu Server 的 linux 机器的备份位置。如何在 linux 服务器上安装此驱动器,以便我的 cron 备份可以将其用作备份目标?

我已经使用静态 IP 地址配置了 WD 驱动器,我认为这在解决方案中很重要。

linux networking ubuntu backup mount

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

使用 grep 和 awk 过滤日期

我在我的.bash_aliases文件中创建了下面的别名

alias auth="grep \"$(date|awk '{print $2,$3}')\" /var/log/auth.log |
            grep -E '(BREAK-IN|Invalid user|Failed|refused|su|Illegal)'"
Run Code Online (Sandbox Code Playgroud)

这应该是:

  • 检查今天的日期
  • grepauth.log今天的消息
  • 用于匹配特定字符串的警告消息的 grep 今日消息

但是,它仅在有 2 位数的日期时才有效,因为编号 <10 的天数前面没有零。

例如,我运行date并将结果通过管道传输到awk. date输出Sat Jan 1 04:56:10 GMT 2011然后 awk 捕获$2并将$3它们提供给 grep,如下所示

Jan 1
Run Code Online (Sandbox Code Playgroud)

但是,当有一位数的日期时,消息auth.log显示如下

Jan  1 00:44:57 linux su[21249]: pam_unix(su:session): session closed for user root
Run Code Online (Sandbox Code Playgroud)

因此,有两个空格以下Janauth.log,但只有一个空格之后Jan在我的grep命令

如何修改命令以允许额外空间?

grep awk shell-script

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