我试图将命令的值保存到变量中,但它给出了错误
var = `cat $1 | grep "STAN: \[$2\]" | awk -F '|' '{print $3; exit}'`
Run Code Online (Sandbox Code Playgroud)
它给了我错误
var: command not found
Run Code Online (Sandbox Code Playgroud) 所以我有一个带有嵌套文件夹的目录,并且在某些时候还有.png图像。
这些图像的命名是这样的“letters_numbers_numbers_letters.png”,我想删除数字之间的下划线。
假设我们有一个名为 的文件a_1_2_b.png,我想将其重命名为a_12_b.png. 我知道我必须使用类似的东西:
find . -name "*[0-9]_[0-9]* -type f -exec bash -c <enter_code here>`
Run Code Online (Sandbox Code Playgroud)
但我不确定如何指定如何删除这个特定的下划线。请记住,还有另外两个下划线我不想碰。
提前致谢!
所以我下载了一堆文本文件,并想将这些文件重命名为包含在这些文件中的标题。
的输出head sn-800.txt是:
吉布森研究公司 https://www.GRC.com/ 系列:现在安全! 剧集:#800 日期:2021 年 1 月 5 日 标题:太阳能暴雪 主持人:Steve Gibson & Leo Laporte 来源:https://media.grc.com/sn/sn-800.mp3 存档:https://www.grc.com/securitynow.htm
简而言之,sn-800.txt应该变成sn-800 - SolarBlizzard.txt
在我进入mv335 个文件之前,我在屏幕上回显所有内容:
#!/bin/bash
for iEpisode in {802..807};
do
echo -n "sn-$iEpisode - ";
grep "^TITLE:" sn-"$iEpisode".txt |
cut -d":" -f2 |
sed 's/\t//g' |
tr -d '\n';
echo ".txt";
done
Run Code Online (Sandbox Code Playgroud)
但似乎无法弄清楚如何删除最后的换行符(上面的`tr),因为这给了我:
.txt02 - Where the Plaintext Is
.txt03 - Comparative Smartphone Security
.txt04 - NAT …Run Code Online (Sandbox Code Playgroud) ls似乎有许多对我来说很奇怪的限制,这些限制未包含在其开关中(例如--max-depth=其他工具所具有的)。我喜欢维护通用标准(因此ls并ll遵循大多数普通发行版所具有的标准),但我的其他别名遵循某种易于记住的语法(lls“长列表、安全性”等)。我可以将其分成几个不同的问题,但由于这一切都与寻找通用操作方法的尝试有关ls,因此列出我的工作清单来描述我正在谈论的内容感觉更合适,因为它们都是相关的。一些具体问题:
我经常听到有人说你永远不应该ls在for循环等中使用。这在默认情况下如何查看子目录等方面是有意义的ls,但是有没有一种简单的方法可以剪辑ls以从不查看子目录内部?我--max-depth=在man页面中没有看到任何类似的内容,但在我看来,如果我们剪辑ls不进入子目录,那么在循环或其他结构中使用应该是可靠的for。是否有一种可靠的方法来剪辑ls为仅一个目录的输出,然后在 for 循环中使用它?
我使用了我认为相当笨重的结构lld(带有目录的长列表)和llf(带有文件的长列表)。有没有更好的方式来表达“我只想查看文件”?或“我只想查看目录?”;再次, man页面中我看不到任何内容。特别是,我只能以-l格式进行此列表,否则我无法 grep 出我不想显示的项目。一般来说,我认为以这种方式使用 grep 可能是一个坏主意(因为锁定-l格式),那么有没有更好的方法来实现仅选择目录项或仅选择文件,而不是使用 grep ?
如果下面的任何其他方法格式错误,我希望知道更好的方法?
尝试拥有一组标准的ls输出(每个发行版的设置通常不同)。
字符[]集通配符。例如ls name[03][17].c, 将匹配name01.c, name07.c, name31.c, name37.c, 并且[]还允许范围:ls name[07][1-9].c
请注意使用\ls来运行裸命令,忽略别名。
我需要.sh从本地机器在我的服务器上运行文件。我可以使用以下命令来完成。
ssh -p my_port_no -i path_to_key user@ip_address "bash -s" < testOnServer.sh
Run Code Online (Sandbox Code Playgroud)
现在我需要使用上述命令传递一些参数。我按照下面的方法做了,成功了。
ssh -p my_port_no -i path_to_key user@ip_address "bash -s" < testOnServer.sh testArg1
Run Code Online (Sandbox Code Playgroud)
我的testOnServer.sh文件如下。
testArg1=$1
echo testArg1 # testArg1 can be seen here.
sudo su
echo testArg1 # testArg1 is missing here.
Run Code Online (Sandbox Code Playgroud)
命令testArg1后缺少的值sudo su。
任何帮助都受到高度赞赏。
在我的脚本中,我有一个名为messages. 我在 Linux Mint 中编写它,运行它没有问题,当我将它移到 Debian Buster 工作站时,该功能与/usr/bin/messages.
我有一个调用脚本的启动脚本messages:
启动脚本
# call to messages script
. messages
Run Code Online (Sandbox Code Playgroud)
消息
messages() {
# reformat the arguments and return them
}
Run Code Online (Sandbox Code Playgroud)
稍后在 startup_script
messages "This is a message"
Run Code Online (Sandbox Code Playgroud)
哪个抛出
./startup_script: line 35: .: /usr/bin/messages: cannot execute binary file
messages: could not open mailbox `/path/to/my/script/<string passed to my function>': No such file or directory
Run Code Online (Sandbox Code Playgroud)
所以我得到了一堆与/usr/bin/messages被调用而不是我的函数相关的错误。
添加后type messages "This is a message",相关输出为:
messages is /usr/bin/messages …Run Code Online (Sandbox Code Playgroud) 输入按以下格式提供:
ksh -x count.sh filename `cat filepath/filename | wc -l
Run Code Online (Sandbox Code Playgroud)
这里的问题是我需要将第二个参数 cat 传递给另一个变量并执行expr -1.
我的要求是我需要计算命令本身的计数,并将其传递给脚本。
对于实际计数,记录总数应小于 1。我还需要删除标题记录。
我们可以用两种方式编写下一个命令:
# using extended regex
$ echo foobar | sed -E 's/(foo)(bar)/\2\1/'
barfoo
Run Code Online (Sandbox Code Playgroud)
和:
# using backslashes
$ echo foobar | sed 's/\(foo\)\(bar\)/\2\1/'
barfoo
Run Code Online (Sandbox Code Playgroud)
使用反斜杠意味着该命令比扩展正则表达式更可移植?
我已经知道如何使用grep或awk匹配日志文件中的某些内容,但是有没有办法执行以下操作?
这样,如果正在搜索的内容是在 BEGINNING 和 END 的上下文中,您可以只搜索您正在搜索的内容发生的上下文。日志文件如下所示:
<several-1000-lines>
...[BEGINX]
some log a
<several-1000-lines>
...[First-string-i-search-for]
<several-1000-lines>
some log b
...[ENDX]
<several-1000-lines>
Run Code Online (Sandbox Code Playgroud)
然后我会在搜索后得到这样的输出[First-string-i-search-for]:
...[BEGINX]
some log a
<several-1000-lines>
...[First-string-i-search-for]
<several-1000-lines>
some log b
...[ENDX]
Run Code Online (Sandbox Code Playgroud) 我有以下命令行,它应该返回值1,以防万一,通过nc检查与相关 IP 和端口的通信:
/bin/nc -z 10.102.10.22 10003 > /dev/null && if [ $? -eq 0 ]; then echo 1; else echo 0; fi
Run Code Online (Sandbox Code Playgroud)
结果令人满意,我得到了价值1。但是当没有与端口或 IP 通信时,命令会“等待”,不会获得任何形式的价值。
在经过特定时间(例如 10 秒)后返回值0(else语句)的正确方法是什么。
该命令的结果每隔很短的时间就会被监视以绘制通信图,因此知道什么时候会很有趣0。
我有一个平面文件,其中的字段中包含从位置 314 到 323 的电话号码。现在我想用 来虚拟该字段1234567890。
为此,我尝试使用以下命令,但都抛出错误:
awk '{var=substr($0,314,10);gsub("[0-9]","1234567890",$var); print}' final_phone.txt >final_phone.txt1
Run Code Online (Sandbox Code Playgroud)
致命:grow_fields_arr:fields_arr:无法分配9849885432字节内存(无法分配内存)
第二种情况
awk 'var=substr($0,314,10) { var = "1234567890" }1' final_phone.txt >final_phone.txt1
Run Code Online (Sandbox Code Playgroud)
这有效,但值没有改变。输出保持不变。
有人可以帮我解决这里的语法吗?
在第一种情况下,我尝试将子字符串分配给变量,并且gsub()我想检查数字模式并替换为1234567890.
有人可以帮我弄这个吗