相关疑难解决方法(0)

如何在Bash中的分隔符上拆分字符串?

我把这个字符串存储在一个变量中:

IN="bla@some.com;john@home.com"
Run Code Online (Sandbox Code Playgroud)

现在我想通过;分隔符拆分字符串,以便我有:

ADDR1="bla@some.com"
ADDR2="john@home.com"
Run Code Online (Sandbox Code Playgroud)

我不一定需要ADDR1ADDR2变量.如果它们是阵列的元素甚至更好.


根据以下答案的建议,我最终得到了以下内容,这就是我所追求的:

#!/usr/bin/env bash

IN="bla@some.com;john@home.com"

mails=$(echo $IN | tr ";" "\n")

for addr in $mails
do
    echo "> [$addr]"
done
Run Code Online (Sandbox Code Playgroud)

输出:

> [bla@some.com]
> [john@home.com]
Run Code Online (Sandbox Code Playgroud)

有一个涉及设置Internal_field_separator(IFS)的解决方案;.我不确定该答案发生了什么,你如何重置IFS为默认值?

RE:IFS解决方案,我试过这个并且它可以工作,我保持旧的IFS然后恢复它:

IN="bla@some.com;john@home.com"

OIFS=$IFS
IFS=';'
mails2=$IN
for x in $mails2
do
    echo "> [$x]"
done

IFS=$OIFS
Run Code Online (Sandbox Code Playgroud)

顺便说一句,我试过的时候

mails2=($IN)
Run Code Online (Sandbox Code Playgroud)

我只是在循环打印时得到第一个字符串,没有括号围绕$IN它工作.

bash shell scripting split

1885
推荐指数
22
解决办法
204万
查看次数

如何从Bash变量中修剪空格?

我有一个包含以下代码的shell脚本:

var=`hg st -R "$path"`
if [ -n "$var" ]; then
    echo $var
fi
Run Code Online (Sandbox Code Playgroud)

但条件代码总是执行,因为hg st始终打印至少一个换行符.

  • 是否有一种简单的方法可以从中删除空格$var(比如trim()PHP中)?

要么

  • 有没有一种标准的方法来处理这个问题?

我可以使用sedAWK,但我想有一个更优雅的解决方案来解决这个问题.

string variables bash trim

854
推荐指数
30
解决办法
124万
查看次数

如何遍历find返回的文件名?

x=$(find . -name "*.txt")
echo $x
Run Code Online (Sandbox Code Playgroud)

如果我在Bash shell中运行上面的代码,我得到的是一个包含多个文件名的字符串,用空格分隔,而不是列表.

当然,我可以进一步将它们分开来获取列表,但我确信有更好的方法可以做到这一点.

那么循环find执行命令结果的最佳方法是什么?

bash find

189
推荐指数
8
解决办法
19万
查看次数

在Bash中将字符串拆分为多个变量

我有一个生成如下的字符串:

192.168.1.1,UPDOWN,Line protocol on Interface GigabitEthernet1/0/13, changed state to up
Run Code Online (Sandbox Code Playgroud)

如何取出该字符串并从中生成2个变量(使用bash)?

比如我想要的

$ip=192.168.1.1 
$int=GigabitEthernet1/0/13
Run Code Online (Sandbox Code Playgroud)

bash

30
推荐指数
3
解决办法
9万
查看次数

循环遍历 sed 的结果

我在循环访问 sed 返回的存储在变量中的行时遇到问题。

目前看起来有点像这样

lines=$(sed -rne '/'"$timestamplastupload"'/,/'"$timestampnow"'/ p' /var/log/test.log)

for line in "$lines"; do

        echo "This line is: $line"

done
Run Code Online (Sandbox Code Playgroud)

但到目前为止这不起作用,循环运行一次,而 $line 变量的内容似乎是整个 $lines 变量,因此只打印一次,而不是逐行循环,前缀为“This line is:”

我缺少什么能够逐段循环 sed 输出的每一行。(最终我会将匹配的行逐行上传到 API),因此我需要单独处理每一行,以便我可以根据需要处理它们。

根据要求,sed 的一些输出已被整理以确保安全

Wed Feb 28 22:33:11 2018 us=452112 xxx/1.2.3.4:55487 [xxx] Inactivity timeout (--ping-restart), restarting
Wed Feb 28 22:33:11 2018 us=452112 xxx/1.2.3.4:55487 [xxx] Inactivity timeout (--ping-restart), restarting
Wed Feb 28 22:33:11 2018 us=452112 xxx/1.2.3.4:55487 [xxx] Inactivity timeout (--ping-restart), restarting
Wed Feb 28 22:33:11 2018 us=452180 xxx/1.2.3.4:55487 SIGUSR1[soft,ping-restart] received, client-instance restarting …
Run Code Online (Sandbox Code Playgroud)

bash loops sed

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

我需要创建一个已创建主题的 kafka 图像

我有一个要求,我需要在本地设置 kafka,主题已经存在于容器中。我正在使用它ladoop/fast-data-dev来做到这一点

我是如何手动做的-

docker run -d --name landoopkafka -p 2181:2181 -p 3030:3030 -p 8081:8081 -p 8082:8082 -p 8083:8083 -p 9092:9092 -e ADV_HOST=localhost landoop/fast-data-dev
Run Code Online (Sandbox Code Playgroud)

运行此命令后,我的容器已启动并正在运行。

现在我像 docker -exec -it landopkafka bash 一样进入这个容器内的 bash

并使用此命令创建主题

kafka-topics --zookeeper localhost:2181 --create --topic hello_topic --partitions 1 --replication-factor 1
Run Code Online (Sandbox Code Playgroud)

我的主题已创建。

但我的要求是我需要一个 docker 文件,该文件将创建主题,我只需要运行它。

或者

我需要运行的 docker compose 文件

伙计们,我需要这方面的帮助,因为我对 docker 和 kafka 完全陌生

apache-kafka docker dockerfile docker-compose

5
推荐指数
2
解决办法
5297
查看次数

awk:从字符串中转义正则表达式运算符的函数

需要一个函数来转义包含 awk 脚本中的正则表达式运算符的字符串。

我遇到了这个“丑陋”的解决方案:

function escape_string( str )
{
    gsub( /\\/, "\\\\",  str );
    gsub( /\./, "\\.", str );
    gsub( /\^/, "\\^", str );
    gsub( /\$/, "\\$", str );
    gsub( /\*/, "\\*", str );
    gsub( /\+/, "\\+", str );
    gsub( /\?/, "\\?", str );
    gsub( /\(/, "\\(", str );
    gsub( /\)/, "\\)", str );
    gsub( /\[/, "\\[", str );
    gsub( /\]/, "\\]", str );
    gsub( /\{/, "\\{", str );
    gsub( /\}/, "\\}", str );
    gsub( /\|/, "\\|", str );

    return …
Run Code Online (Sandbox Code Playgroud)

regex bash awk gawk

4
推荐指数
1
解决办法
1647
查看次数

Bash for 循环跳过数组的第一个元素

在 bash 中,我有一个字符串,我想在数组中转换并在 for 循环中使用它,但跳过第一个元素。下面的代码不起作用:

build_string="100 99 98"
build_list=("$build_string")

echo $build_list
for i in "${build_list[@]:1}"
   do  echo "i: " $i
done
Run Code Online (Sandbox Code Playgroud)

for 循环不打印任何内容。你可以帮帮我吗?谢谢。

bash

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

如何在bash中的多字符分隔符上拆分字符串?

为什么不能使用以下bash代码?

for i in $( echo "emmbbmmaaddsb" | split -t "mm"  )
do
    echo "$i"
done
Run Code Online (Sandbox Code Playgroud)

预期产量:

e
bb
aaddsb
Run Code Online (Sandbox Code Playgroud)

bash shell ubuntu gnu-coreutils

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

如何:在 bash 中打印键/值对中的值

我只需要打印900这一行:auth required pam_faillock.so preauth silent deny=3 unlock_time=604800 fail_interval=900

但是,该行并不总是按此顺序排列。

我需要找出如何打印 后的值=。我需要这样做unlock_timefail_interval

我整晚都在寻找完全适合我的东西,但找不到。我一直在摆弄 sed 和 awk,但还没有确定这一点。

bash

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