相关疑难解决方法(0)

将字符串bash转换为带有空格和额外分隔符的数组

我正在尝试从包含管道("|")作为分隔符并包含空格的字符串创建数组.我一直在寻找一段时间,我已经接近了,比如像我如何在Bash中的分隔符上拆分字符串?,将字符串拆分成数组,然后更多.我很接近但不太合适.两个主要问题是字符串中有空格,有起始和结束分隔符,有些字段是空白的.此外,我不是只回显值,而是将它们分配给变量.这是源数据的格式:

|username|full name|phone1|phone2|date added|servers|comments|
Run Code Online (Sandbox Code Playgroud)

例:

|jdoe | John Doe| 555-1212 | |1/1/11 |  workstation1, server1 | added by me |
Run Code Online (Sandbox Code Playgroud)

这就是我需要的:

Username: jdoe
Fullname: John Doe
Phone1: 555-1212
Phone2: 
Date_added: 1/1/11
Servers: workstation1, server1
Comments: guest account
Run Code Online (Sandbox Code Playgroud)

编辑:我使用sed去掉每个分隔符之前和之后的第一个和最后一个分隔符和空格,现在输入:

jdoe|John Doe|555-1212||1/1/11|workstation1, server1|added by me
Run Code Online (Sandbox Code Playgroud)

这是我尝试过的事情:

oIFS="$IFS"; IFS='|'
for line in `cat $userList`; do
  arr=("$line")
  echo "Username: ${arr[0]}"  #not assigning a variable, just testing the output
  echo "Full Name: ${arr[1]}"
  echo "Phone 1: ${arr[2]}"
  echo "Phone 2: ${arr[3]}" …
Run Code Online (Sandbox Code Playgroud)

arrays string bash delimiter

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

bash解析文件名

在bash中有什么方法可以解析这个文件名:

$file = dos1-20120514104538.csv.3310686

变成$date = 2012-05-14 10:45:38和变量$id = 3310686

谢谢

bash parsing tokenize

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

需要在 Bash 中拆分以冒号分隔的字符串并分配给变量

我有一个总是有 4 个“单词”的字符串

Strings:With:Four:Words and spaces
Run Code Online (Sandbox Code Playgroud)

并且需要在 Bash 中将其拆分为 4 个变量。所以..

var1="Strings"
var2="With"
var3="Four"
var4="Words and spaces"
Run Code Online (Sandbox Code Playgroud)

我该怎么做呢?

bash shell

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

如何读取 bash 中的行并用指定的分隔符分隔它们?

我需要编写一个具有以下行为的脚本:

$ echo $'one&some text\ntwo&other text' | ./my_script.sh --delimiter &
Line:
1st: one
2nd: some tex
Line:
1st: two
2nd: other text
Run Code Online (Sandbox Code Playgroud)

也可以使用默认分隔符来调用,即\t

$ echo $'one\tsome text\nfive\tother text' | ./my_script.sh

输出应该与上面相同。

脚本应通过标准输入获取输入。

做到这一点最简单的方法是什么?可能是在纯粹的bash中。

我已经尝试过这种方法,但它不起作用,我不知道为什么:

while read -r line
do
    echo "$line"
    IFS=$DELIMITER
    arr=(${line//$DELIMITER/ })
    echo ${arr[0]}
    echo ${arr[1]}
done
Run Code Online (Sandbox Code Playgroud)

bash

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

小写+大写+连接shell中字符串的单词(例如bash)

如何大写+连接字符串的单词?
(首字母大写,所有其他字母小写)

例:
input = "jAMeS bOnD"
output = "JamesBond"

string shell lowercase capitalize capitalization

3
推荐指数
1
解决办法
3370
查看次数

如何在bash shell脚本中读取和拆分逗号分隔文件?

我想逐行读取文件,用逗号(,)分隔每一行并将结果存储在数组中.如何在bash shell脚本中执行此操作?

逗号分隔文件中的示例行

123,2014-07-21 10:01:44,123|8119|769.00||456|S
Run Code Online (Sandbox Code Playgroud)

这应该是拆分后的输出:

arr[0]=123 arr[1]=2014-07-21 10:01:44 arr[2]=123|8119|769.00||456|S
Run Code Online (Sandbox Code Playgroud)

arrays bash shell split

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

Bash:通过分隔符分割字符串,忽略空格

我有类似的字符串

name1::1.1.1.1::ps -ax
Run Code Online (Sandbox Code Playgroud)

我想使用 bash 脚本根据分隔符分割字符串::

所需的输出应该是一个包含 3 个元素的数组

("name1" "1.1.1.1" "ps -ax")
Run Code Online (Sandbox Code Playgroud)

不带双引号

我感谢您的帮助。

unix linux bash shell

3
推荐指数
1
解决办法
3458
查看次数

valgrind :一次打开多个抑制文件

我有一个脚本,它使用 valgrind 执行我的单元测试。现在脚本变大了,因为我可能有 10 个抑制文件(每个库一个),而且我可能不得不添加更多抑制文件。

现在,而不是有这样的一行:

MEMCHECK_OPTIONS="--tool=memcheck -q -v --num-callers=24 --leak-check=full --show-below-main=no --undef-value-errors=yes --leak-resolution=high --show-reachable=yes --error-limit=no --xml=yes --suppressions=$SUPPRESSION_FILES_DIR/suppression_stdlib.supp --suppressions=$SUPPRESSION_FILES_DIR/suppression_cg.supp --suppressions=$SUPPRESSION_FILES_DIR/suppression_glut.supp --suppressions=$SUPPRESSION_FILES_DIR/suppression_xlib.supp --suppressions=$SUPPRESSION_FILES_DIR/suppression_glibc.supp --suppressions=$SUPPRESSION_FILES_DIR/suppression_glib.supp --suppressions=$SUPPRESSION_FILES_DIR/suppression_qt.supp --suppressions=$SUPPRESSION_FILES_DIR/suppression_sdl.supp --suppressions=$SUPPRESSION_FILES_DIR/suppression_magick.supp --suppressions=$SUPPRESSION_FILES_DIR/suppression_sqlite.supp --suppressions=$SUPPRESSION_FILES_DIR/suppression_ld.supp --suppressions=$SUPPRESSION_FILES_DIR/suppression_selinux.supp --suppressions=$SUPPRESSION_FILES_DIR/suppression_opengl.supp"
Run Code Online (Sandbox Code Playgroud)

我试着这样做:

MEMCHECK_OPTIONS="--tool=memcheck -q -v --num-callers=24 --leak-check=full --show-below-main=no --undef-value-errors=yes --leak-resolution=high --show-reachable=yes --error-limit=no --xml=yes --suppressions=$SUPPRESSION_FILES_DIR/*.supp"
Run Code Online (Sandbox Code Playgroud)

但 valgrind 需要一个文件名(不接受星号)。

由于我在 bash 脚本中执行此操作,有人可以告诉我形成该行的最简单方法是什么吗?

我想过列出抑制目录中的所有文件,然后遍历该列表,并添加--suppressions=前缀。

编辑

我忘了问。这是我到目前为止:

ALL_SUPPRESION_FILES=`ls $SUPPRESSION_FILES_DIR/*.supp`
Run Code Online (Sandbox Code Playgroud)

但我找不到如何将其传输到数组中。有人可以帮忙吗?

linux bash valgrind

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

shell脚本命令使用变量分隔符拆分字符串

我想在具有以下条件的bash shell脚本中拆分字符串.

1)分隔符是一个变量

2)分隔符是多个haracater

例:

A quick brown fox
var=brown
Run Code Online (Sandbox Code Playgroud)

我想将字符串拆分为A quick,brown fox但是使用变量var作为分隔符而不是brown

bash shell

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

Awk--将字符串拆分为长度为n的子字符串

我熟悉awk程序中使用的函数split().我想知道如何使用它将字符串拆分成长度为n的较小字符串?像(n设置为2)的东西:

输入:

abcdefgh
Run Code Online (Sandbox Code Playgroud)

输出:

ab cd ef gh
Run Code Online (Sandbox Code Playgroud)

awk

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