小编ede*_*esz的帖子

Bash CLI 从命令的输出中删除引号

我正在尝试使用jqper here加载 JSON 文件。它非常简单,并且有效:

$ cat ~/Downloads/json.txt | jq '.name'
"web"
Run Code Online (Sandbox Code Playgroud)

但是,我需要将此变量的输出分配给命令。我试图这样做,这有效:

$ my_json=`cat ~/Downloads/json.txt | jq '.name'`
$ myfile=~/Downloads/$my_json.txt
$ echo $myfile
/home/qut/Downloads/"web".txt
Run Code Online (Sandbox Code Playgroud)

但我想要/home/qut/Downloads/web.txt

如何删除引号,即更改"web"web

command-line text-processing json

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

Windows 文件路径转换为 ​​Linux 文件路径

我在 bash 变量中有一个 Windows 路径作为字符串:

file='C:\Users\abcd\Downloads\testingFile.log'
Run Code Online (Sandbox Code Playgroud)

我正在尝试将此路径转换为以/c/Users....

我的尝试

以下工作:

file=${file/C://c}
file=${file//\\//}
echo $file
> /c/Users/abcd/Downloads/testingFile.log
Run Code Online (Sandbox Code Playgroud)

问题

在这里,我为包含文件路径的字符串执行了此操作。我问这个问题的原因是我必须在 Ubuntu 16.04 的 bash 脚本中转换 20 个这样的字符串,每次我这样做时,我必须为每次转换写 2 行 - 它占用了大量空间!

有没有办法组合这两个命令

file=${file/C://c}
file=${file//\\//}
Run Code Online (Sandbox Code Playgroud)

成一个命令?

command-line bash paths text-processing

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

获取可用包的名称和版本到文本文件 - 每个包的名称和版本仅在同一行

我正在寻找一个文本文件,其中包含一些可用软件包及其最新版本的列表。我需要在同一行中包含包名称及其最新版本。

试图

目前,我可以获得单个包的版本号:

示例 1:

apt-cache show python-numpy | grep Version
Run Code Online (Sandbox Code Playgroud)

这给了我 1 行输出:

Version: 1:1.8.2-2
Run Code Online (Sandbox Code Playgroud)

例子2:

apt-cache show mysql-server | grep Version
Run Code Online (Sandbox Code Playgroud)

这给了我 1 行输出:

Version: 5.5.44-0+deb8ul
Run Code Online (Sandbox Code Playgroud)

问题

我感兴趣的包不止一个。

要求

我正在寻找的是包名称和版本 - 我想要这种格式:

python-numpy 1.8.2-2
mysql-server 5.5.44-0
python-six 1.8.0-1
python-wheel 0.24.0-1
apache2 2.4.10-10
python-urllib3 1.9.1-3
python-setuptools 5.5.1-1
Run Code Online (Sandbox Code Playgroud)

如果可能,我希望将这 6 行写入“Output.txt”。如果不可能在同一个文件中获得所有这些行,那么我只想python-numpy 1.8.2-2在输出文件中获得上面的第一行。

题:

目前,我可以单独获取每个包的名称和版本。但是,有没有办法自动执行此过程并一次性完成所有操作?

编辑:

我正在寻找的唯一包是:

python-wheel
python-numpy
mysql-server
python-setuptools
python-six
apache2
python-urllib3
Run Code Online (Sandbox Code Playgroud)

command-line apt

6
推荐指数
2
解决办法
477
查看次数

注释、取消注释、根据字符串更改设置、从终端添加行

我必须编辑一些文件以取消注释一行、更改该行上的值或取消注释一行。我正在尝试通过 bash 脚本来做到这一点。

我正在尝试编辑/etc/ssh/sshd_config和更改

IgnoreRhosts yes
#RhostsRSAAuthentication no
Run Code Online (Sandbox Code Playgroud)

IgnoreRhosts no
RhostsRSAAuthentication no
Run Code Online (Sandbox Code Playgroud)

和改变

#PermitRootLogin yes
Run Code Online (Sandbox Code Playgroud)

PermitRootLogin no
AllowUsers mroberts
Run Code Online (Sandbox Code Playgroud)

并且还编辑/etc/pam.d/system-auth文件以便从

password sufficient pam_unix.so try_first_pass use_authtok nullok md5
Run Code Online (Sandbox Code Playgroud)

password sufficient pam_unix.so try_first_pass use_authtok nullok md5 shadow
Run Code Online (Sandbox Code Playgroud)

我还需要将此行添加到/etc/pam.d/system-auth文件中:

/etc/pam.d/system-auth file password required pam_unix.so remember=10
Run Code Online (Sandbox Code Playgroud)

我一直在使用手动完成所有这些操作,vi并且可以通过该编辑器进行更改。但是,我必须在许多主机上执行此过程,而且我无法一次在一台主机上重复该过程。我在一个忘记添加的地方犯了一个错误,AllowUsers mroberts并且被主机锁定了将近 36 个小时。

我不确定如何搜索一行并更改其中的一部分而不是整行。

有没有办法从终端或通过 bash 脚本进行此类更改?

server ssh command-line bash

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

标签 统计

command-line ×4

bash ×2

text-processing ×2

apt ×1

json ×1

paths ×1

server ×1

ssh ×1