我正在尝试设置一个使用cat函数创建带Perl文件的脚本:PHP:C ++:Python:COBOL:Ruby:Rails
我想要做的是采用这个以冒号分隔的列表并将每行一个项目输出到标准输出(不带冒号)
#!/bin/bash
cat File
Perl:PHP:C++:Python:COBOL:Ruby:Rails
split (/:/)
我一直在犯错误,我可能只是没有正确使用拆分命令
答案 0 :(得分:1)
您不需要split
。 split
是一种根据大小阈值将文件拆分为较小文件的工具。它不是打破分隔符。但如果你只想输出到标准输出,这是一个快速的方法:
$ cat > foo # Write one line to the new file `foo`
Perl:PHP:C++:Python:COBOL:Ruby:Rails
$ IFS=: read -a langs < foo # Read the 1st line of the file into the array `langs`
# splitting on colon
$ printf '%s\n' "${langs[@]}" # Wordsplit the array into arguments to `printf`
Perl
PHP
C++
Python
COBOL
Ruby
Rails
你可以轻松地用$(<foo)
读取整个文件,但是你必须做一些更复杂的分隔符杂耍:
$ splitByColon() { # Use a function to maintain scope
> local IFS=: # Set the colon as the field separator just in this function
> local -a langs=( $(<"$1") ) # Read the file into the array, split on colons
> IFS=$'\n' # Prepare to output split by newlines
> echo "${langs[*]}"
> }
$ splitByColon foo
答案 1 :(得分:0)
我把它写成评论,但我需要格式化:
您正在寻找&#34; here-document&#34;
cat >File <<END_OF_DATA
Perl:PHP:C++:Python:COBOL:Ruby:Rails
END_OF_DATA
@kojiro向您展示如何将文件读入以冒号分隔的单词。
答案 2 :(得分:0)
您可以尝试
<强> cat File | tr ':' '\n'
强>
如果您需要“处理”这些项目,请执行以下操作:
<强> for MYVAR in $(cat File | tr ':' '\n') ; do echo ${MYVAR} ; done
强>
:)
戴尔