从源文本文件

时间:2016-11-02 18:58:50

标签: shell unix

我有一个文本文件,在该文本文件中有一些以#开头的行。我想要做的是从#开头的行中创建新文件。因此,例如在文本文件中,如果有一行以文本“#FutureExams”开头,则脚本将占用该行并生成一个名为FutureExams.txt的新文件我想出的脚本当前运行但不提供我有什么结果。

find . -name "Data.txt" | while read line; do 
    if [ "$line" == "#"* ]; then 
        touch "$line".txt
    fi
done

也许有一种更简单的编写脚本的方式。

3 个答案:

答案 0 :(得分:0)

您可以使用GNU sed和xargs这样的管道

sed -rn "/^#/ {s/^#(.*)/\1.txt/g;p}" Data.txt | xargs touch
  • 以#开头的行的sed过滤器并将sp命令应用于此类行
  • s命令会将#\1后面的所有内容捕获到替换部分中,以便在其中附加.txt
  • p命令将修改后的字符串打印到管道
  • xargs将每个字符串转发给触摸命令

答案 1 :(得分:0)

您可以尝试以下程序 -

vipin@kali:~$ cat kk.txt
vipin
#file1.txt
kumar
#file2.txt
vipin@kali:~$ cat kk.sh
while read line
do
var1=`cut -c1 <<<$line`          ### cut first character
if [ "$var1" == "#" ]; then
   var2=`cut -c2- <<<$line`      ### cut from 2nd till last character of line
   touch $var2                   ### create file
fi
done < kk.txt
vipin@kali:~$ date
Sat Oct 29 22:10:27 EDT 2016
vipin@kali:~$ ./kk.sh
vipin@kali:~$ ls -ltr |tail -2
-rw-r--r-- 1 vipin vipin     0 Oct 29 22:10 file1.txt
-rw-r--r-- 1 vipin vipin     0 Oct 29 22:10 file2.txt

答案 2 :(得分:0)

使用grepcuttouch的简单单线:

for i in $(grep '^#' Data.txt |cut -c2-); do touch "$i".txt; done