标签: scripting

awk :解析并写入另一个文件

我在 XML 文件中有如下记录。我需要搜索<keyword>SEARCH</keyword>,如果存在,那么我需要获取整个记录并写入另一个文件。(从<record>to开始</record>

下面是我的 awk 代码,它在循环内。$1保存每条记录的逐行值。

if(index($1,"SEARCH")>0)
{
print $1>> "output.txt"
}
Run Code Online (Sandbox Code Playgroud)

这个逻辑有两个问题,

  1. 它正在写入output.txt文件,只有<keyword>SEARCH</keyword>元素而不是整个记录(从<record>to开始</record>
  2. SEARCH 也可以出现在<detail>标签中。这段代码甚至会将该标签写入output.txt

XML文件:

<record category="xyz">
<person ssn="" e-i="E">
<title xsi:nil="true"/>
<position xsi:nil="true"/>
<names>
<first_name/>
<last_name></last_name>
<aliases>
<alias>CDP</alias>
</aliases>
<keywords>
<keyword xsi:nil="true"/>
<keyword>SEARCH</keyword>
</keywords>
<external_sources>
<uri>http://www.google.com</uri>
<detail>SEARCH is present in abc for xyz reason</detail>
</external_sources>
</details>
</record>
<record category="abc">
<person ssn="" e-i="F">
<title xsi:nil="true"/>
<position xsi:nil="true"/>
<names>
<first_name/> …
Run Code Online (Sandbox Code Playgroud)

scripting xml awk shell-script

2
推荐指数
1
解决办法
1603
查看次数

如何以 root 身份执行脚本,以特定用户身份执行其中的一些命令,并以 root 身份仅执行一个命令

我想以普通用户身份执行脚本并执行关闭 apache(需要 root 密码)的命令。

我想知道是否可以使用 sudo 运行该脚本,但它会以特定用户身份执行某些命令并以 root 身份执行特定命令。

我怎样才能做到这一点?

scripting bash sudo

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

具有大量文件的 shell 脚本 - 游戏中时光倒流

我创建了一个 shell 脚本来每分钟在我的树莓派上捕获图像。我认为有些事情不太正确,因为它一直在拍照但没有保存它们。我想知道是否有人可以指出这个脚本是否应该工作:

#!/bin/bash
DATE=$(date +"%Y-%m-%d")
TIME=$(TIME +"%H%M%S")
if[! -d /media/pi/organ/$DATE]; then mkdir /media/pi/organ/$DATE; fi
raspistill -vf -ISO 100 -o /media/pi/organ/$DATE/$TIME.jpg
Run Code Online (Sandbox Code Playgroud)

附加信息: raspistill -vf -ISO 100 -o /media/pi/organ/$DATE.jpg工作

我还添加了 crontab 每分钟运行一次,这也有效:

* 8-20 * * * /home/pi/camera.sh 2>&1
Run Code Online (Sandbox Code Playgroud)

我担心的是将它放置超过 4 周,因此文件数量会超过文件夹的限制,因此我试图将其分解。

当我添加此脚本时,它停止工作,我不知道如何从这里进行故障排除。

linux scripting shell-script

2
推荐指数
1
解决办法
287
查看次数

只要在bash中按“是”,如何执行“是/否”操作?

假设我在 bash 脚本中有 Yes/No 结构:

read -r -p "Yes or no?" response
if [[ $response =~ ^([yY][eE][sS]|[yY])$ ]]
 then 
 do ...
else
 exit 0
fi
Run Code Online (Sandbox Code Playgroud)

我希望这个构造一直执行到我按“否”为止。即,如果我按“是”,那么在操作完成后“做...”执行我想再次“是还是否?” 回复。

scripting bash

2
推荐指数
1
解决办法
6710
查看次数

在“批处理模式”中向 debchange 添加多个注释?

我正在尝试为 git 存储库自动化 deb 包构建器,作为其中的一部分,我想获得一堆提交评论(自上一个包发布以来)并将它们放入debian/changelog新版本的多个评论中。

我正在使用这样的dch“批处理模式”:

dch -v ${RELEASE_VER} --distribution stable "comment"
Run Code Online (Sandbox Code Playgroud)

但这仅适用于一条评论。如果我多次运行它,我会得到多个版本条目。

dch手册页说:

如果在命令行上给出更改的文本,debchange 将在批处理模式下运行并简单地添加文本,必要时使用换行符

我不确定“必要时使用换行符”是什么意思,但如果作为第一个非选项参数传递的注释文本包含新行,dch将从文本中删除新行并将其作为单个注释。

scripting deb

2
推荐指数
1
解决办法
1144
查看次数

如何删除行中具有一个值的所有行?

我有一个文件如下

input file
0.0  4  6  5  1  2  9  4  5  1  ..... 
0.25
0.5  3  1  
1.0  3  7  8  2  
1.5  3  3  3  4  6  4  5   
2.0  
2.5  6  7  6  9 
Run Code Online (Sandbox Code Playgroud)

我想删除所有行中只有一个值的行,所以结果将是这样的

out file  
0.0  4  6  5  1  2  9  4  5  1  ..... 
0.5  3  1  
1.0  3  7  8  2  
1.5  3  3  3  4  6  4  5   
2.5  6  7  6  9 
Run Code Online (Sandbox Code Playgroud)

scripting sed text-processing

2
推荐指数
1
解决办法
196
查看次数

我想使用在 SSH 会话中声明的变量在我的 shell 脚本中本地使用

每当我尝试使用在我的 SSH 会话中声明的变量时,它都会给我空白输出。这是我尝试执行的代码:

ssh -T host <<\HERE
export usage1=$(df -h |grep /nas/infa|sed s/%//g| awk '{printf("%d\n",$4)}');
echo $usage1
HERE
echo $usage1
Run Code Online (Sandbox Code Playgroud)

我能够在 SSH 会话中获得所需的输出,但是在 SSH 之外调用相同的变量时,它给我空白。

scripting ssh shell-script variable

2
推荐指数
1
解决办法
386
查看次数

如果在脚本内部调用,Rsync 的行为会有所不同

所以,我正在编写一个备份脚本,并想跳过 .iso 文件。

如果我从命令行使用命令,一切正常:

rsync -a --delete --exclude='*.iso' /home/user/Desktop/Work /mnt/profile/Desktop/
Run Code Online (Sandbox Code Playgroud)

但是,当我尝试在我的脚本中使用它时,没有获得“排除”设置,并继续复制 .iso 文件。这是脚本:

#!/bin/bash
set -e

SRC_DIR="/home/user/Desktop/Work"
DST_MOUNTPOINT="/mnt/profile"
DST_DIR="/mnt/profile/Desktop/"
OPTIONS=" --exclude='*.iso' "

mountpoint -q $DST_MOUNTPOINT || mount $DST_MOUNTPOINT

rsync -a --delete $OPTIONS $SRC_DIR $DST_DIR
Run Code Online (Sandbox Code Playgroud)

如果我运行脚本,获取它的 PID 并检查 /proc/PID/cmdline,排除设置就在那里。

我做错了什么?

scripting bash shell-script

2
推荐指数
1
解决办法
3858
查看次数

逐行读取文件并放入其他字符串

我想逐行读取文件并将其内容放在特定位置的其他字符串中。我创建了以下脚本,但无法将文件内容放入该字符串中。

文件:cat /testing/spamword

spy
bots
virus
Run Code Online (Sandbox Code Playgroud)

脚本:

#!/bin/bash

file=/testing/spamword

cat $file | while read $line;

do

echo 'or ("$h_subject:" contains "'$line'")'

done
Run Code Online (Sandbox Code Playgroud)

输出:

or ("$h_subject:" contains "")

or ("$h_subject:" contains "")

or ("$h_subject:" contains "")
Run Code Online (Sandbox Code Playgroud)

输出应该是这样的:

or ("$h_subject:" contains "spy")
or ("$h_subject:" contains "bots")
or ("$h_subject:" contains "virus")
Run Code Online (Sandbox Code Playgroud)

linux scripting shell-script

2
推荐指数
1
解决办法
1346
查看次数

如何在多个文件上循环脚本?

我有 Gnuplot 脚本(exe),在这个脚本中,我提供X_001作为输入文件,由某个函数绘制,给出输出文件X_001.png。如果我手动输入输入和输出文件的名称,效果会很好。我试图在文件{X_001..X_300}上循环这个脚本 我写了这个循环

for i in X_*; do sed -i 's/X_*/${i}/g' exe ; ./exe ; done
Run Code Online (Sandbox Code Playgroud)

但这无济于事

这应该在exe脚本中进行更改

set term png size 1600,1200
set output "X_001.png"
splot 'X_001'
Run Code Online (Sandbox Code Playgroud)

scripting sed text-processing

2
推荐指数
1
解决办法
996
查看次数

标签 统计

scripting ×10

shell-script ×5

bash ×3

linux ×2

sed ×2

text-processing ×2

awk ×1

deb ×1

ssh ×1

sudo ×1

variable ×1

xml ×1