我正在尝试学习 sed,但遇到了很多麻烦。我想要做的是使用带有 sed 命令的 bash 脚本处理我的 passwd 文件以执行以下操作:对于组 ID 为 20000 的每个用户,将文件中的 GID 替换为 2000x,其中 x 是第一个字母的顺序用户的用户名(即:a 为 1,b 为 2 等)此外,对于默认 shell 为 bash 的每个用户,将其组更改为 bash,对于那些使用 shell tcsh 的用户,将其组更改为 tcshgroup。我已经在 awk 中完成了上述工作(我发现使用起来更容易),但我什至不知道从哪里开始使用 sed。任何帮助深表感谢。
这是 passwd 文件的一部分:
speech-dispatcher:x:108:29:Speech Dispatcher,,,:/var/run/speech-dispatcher:/bin/sh
colord:x:109:117:colord colour management daemon,,,:/var/lib/colord:/bin/false
lightdm:x:110:118:Light Display Manager:/var/lib/lightdm:/bin/false
avahi:x:111:120:Avahi mDNS daemon,,,:/var/run/avahi-daemon:/bin/false
hplip:x:112:7:HPLIP system user,,,:/var/run/hplip:/bin/false
pulse:x:113:121:PulseAudio daemon,,,:/var/run/pulse:/bin/false
saned:x:114:20000::/home/saned:/bin/tcsh
mmccormick:x:1000:20000:owner,,,:/home/mmccormick:/bin/bash
Run Code Online (Sandbox Code Playgroud)
理想情况下,我会选择每行的第 4 个字段来获取 shell 的组 ID 和第 7 个字段,但同样,我不知道在 sed 中执行此操作的方法。提前致谢。
下面的脚本不起作用。任何帮助,将不胜感激
for host in `cat db_hosts_imsi.txt` ; do "ping6 $host"; done
Run Code Online (Sandbox Code Playgroud)
-bash: ping6 2606:ae00:3001:8311:172:16:244:1d: command not found
-bash: ping6 2606:ae00:3001:8311:172:16:244:45: command not found
-bash: ping6 2606:ae00:3001:8311:172:16:244:54: command not found
Run Code Online (Sandbox Code Playgroud) 你好,我想我只想提取匹配的一个组成部分,例如直到第一个“_”
echo "Ha00030_Z6_L008_I1_001.fastq.gz" | grep -P -o '^H.+?_'
Run Code Online (Sandbox Code Playgroud)
然而上面的返回,Ha00030_但我只想Ha00030
我可以做些什么,括号或其他东西来向 grep 表明我只想要匹配的某个部分?
编辑:^H 不是必需的。所以匹配第一个“_”就足够了。
我需要创建一个 .sh 脚本,这对我来说是新事物。我有一些例子可以借鉴,但我希望做得更好。
我看到这样的事情:
date -d $date | grep "Fri"
$status=$?
if [ ${status} == 0 ]; then
Run Code Online (Sandbox Code Playgroud)
是否可以将此片段折叠成一行以达到此效果?
if [ date -d $date | grep "Fri" = 0 ]; then
Run Code Online (Sandbox Code Playgroud)
我删除了双“=”,因为我知道它是多余的。
我想从登录的 shell 中获取 tar 并将该 tar 文件带到远程主机,然后在那里提取 tar 文件。我有以下命令,但 tar 本身没有创建。
time=`date`
timestamp=`date +%F_%H%M`
backpfilename=db${timestamp}.tar.gz
cd /home/aryan/ && tar -cvzf $backupfilename | ssh root@remoteserver 'cd /home/aryantest/ && tar -xvzf $backpfilename'
Run Code Online (Sandbox Code Playgroud)