Questions tagged «string»

字符串操作:提取字符串的一部分,替换文本,格式化为给定的宽度等。

2
除Bash和Zsh之外的其他外壳程序是否支持ANSI-C引用?例如$'string'
我有一个shell脚本,该脚本使用以下命令在其输出中打印一个绿色的选中标记: col_green="\e[32;01m" col_reset="\e[39;49;00m" echo -e "Done ${col_green}✓${col_reset}" 在阅读了有关Bash的ANSI-C引用之后,我意识到我可以在设置颜色变量并-e从echo中删除标志时使用它。 col_green=$'\e[32;01m' col_reset=$'\e[39;49;00m' echo "Done ${col_green}✓${col_reset}" 这似乎很吸引人,因为它意味着无论将消息传递给Bash的内置echo还是外部util /bin/echo(我在macOS上),消息都能正确打印。 但这是否会使脚本的可移植性降低?我知道Bash和Zsh支持这种引用风格,但是我不确定其他人。

4
字符串替换:所有出现
一个简单的问题,但我找不到答案。zsh文档使我不知所措:-( function z () { echo ${1:s/the/THE} } $ z thethethe THEthethe ... 我如何才能将所有 “ the”替换为“ THE”,而不仅仅是第一次出现?使用zsh,这似乎是最难找到的示例。
13 zsh  string 



3
如何在不再次调用sed或awk的情况下从字符串中删除点字符?
我有一个hostlist.txt包含以下内容的文件: host1.mydomain.com host2.mydomain.com anotherhost www.mydomain.com login.mydomain.com somehost host3.mydomain.com 我有以下小脚本: #!/usr/local/bin/bash while read host; do dig +search @ns1.mydomain.com $host ALL \ | sed -n '/;; ANSWER SECTION:/{n;p;}'; done <hostlist.txt \ | gawk '{print $1","$NF}' >fqdn-ip.csv 输出到fqdn-ip.csv: host1.mydomain.com.,10.0.0.1 host2.mydomain.com.,10.0.0.2 anotherhost.internal.mydomain.com.,10.0.0.11 www.mydomain.com.,10.0.0.10 login.mydomain.com.,10.0.0.12 somehost.internal.mydomain.com.,10.0.0.13 host3.mydomain.com.,10.0.0.3 我的问题是如何删除.逗号前的内容而不进行调用sed或gawk再次调用?我可以在现有步骤中执行某些步骤,sed还是gawk可以删除点的调用? hostlist.txt 将包含数千个主机,因此我希望我的脚本快速高效。


5
Shell命令输出中的字符数
我正在编写一个脚本,该脚本需要一步来计算命令输出中的字符数。 例如,使用该命令readlink -f /etc/fstab应该返回,10因为该命令的输出为10个字符长。 使用以下代码,使用存储的变量已经可以做到这一点: variable="somestring"; echo ${#variable}; # 10 不幸的是,对命令生成的字符串使用相同的公式不起作用: ${#(readlink -f /etc/fstab)}; # bash: ${#(readlink -f /etc/fstab)}: bad substitution 我知道可以通过首先将输出保存到变量来做到这一点: variable=$(readlink -f /etc/fstab); echo ${#variable}; 但我想删除多余的步骤。 这可能吗?仅使用内置或标准实用程序与Almquist shell(sh)兼容是可取的。
12 shell  string  variable 


1
什么时候可以在可执行二进制文件中编辑字符串?
我有一个可执行的二进制文件;让我们称之为a.out。我可以看到二进制文件包含字符串 $ strings a.out ... /usr/share/foo .... 我需要将字符串更改/usr/share/foo为/usr/share/bar。我可以将字符串替换为sed吗? sed -i 's@/usr/share/foo@/usr/share/bar@' a.out 这看起来很安全。当字符串长度不同时,这也可以工作吗?


3
在Bash中从字符串转到“单词”数组
我需要从字符串转到数组,其中每个条目都是该字符串上的每个单词。例如,从以下开始: VotePedro="Vote for Pedro" 我需要数组: Vote For Pedro 然后,我应该可以将其迭代为: for i in "${votePedroArray[@]}" do ## Do something done

3
一次替换多个字符串
我正在寻找一种使用通用Unix工具(bash,sed,awk或perl)用具体值替换模板文件中占位符字符串的方法。重要的是,一次更换即可完成更换,也就是说,对于另一次更换,不得考虑已经扫描/更换的物品。例如,这两次尝试均失败: echo "AB" | awk '{gsub("A","B");gsub("B","A");print}' >> AA echo "AB" | sed 's/A/B/g;s/B/A/g' >> AA 在这种情况下,正确的结果当然是BA。 通常,该解决方案应等效于从左至右扫描输入,以与给定替换字符串之一进行最长匹​​配,并且对于每个匹配,执行替换并从输入中的该点继续进行操作(无已读取的输入,也不应考虑执行替换操作以进行匹配)。实际上,细节并不重要,只是替换的结果从不考虑全部或部分替换。 注意我只是在寻找正确的通用解决方案。请不要提出某些输入(输入文件,搜索和替换对)失败的解决方案,但是看起来不太可能。
11 bash  sed  awk  string  replace 

4
如何在bash中找到两个字符串的重叠部分?[关闭]
关闭。这个问题是题外话。它当前不接受答案。 想改善这个问题吗? 更新问题,使它成为Unix&Linux Stack Exchange 的主题。 5年前关闭。 我有两个琴弦。为了示例,它们的设置如下: string1="test toast" string2="test test" 我想要的是找到从字符串开头开始的重叠。在上面的示例中,重叠是指字符串“ test t”。 # I look for the command command "$string1" "$string2" # that outputs: "test t" 如果字符串是字符串,string1="atest toast"; string2="test test"则从开始检查开始,以“ a”开头,则它们将没有重叠string1。



By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.