diff --git a/src/main/java/org/apache/sling/pipes/internal/CommandExecutorImpl.java b/src/main/java/org/apache/sling/pipes/internal/CommandExecutorImpl.java
index ade81a2..198e94d 100644
--- a/src/main/java/org/apache/sling/pipes/internal/CommandExecutorImpl.java
+++ b/src/main/java/org/apache/sling/pipes/internal/CommandExecutorImpl.java
@@ -79,6 +79,7 @@
     static final String WHITE_SPACE_SEPARATOR = "\\s";
     static final String COMMENT_PREFIX = "#";
     static final String SEPARATOR = "|";
+    static final String LINE_SEPARATOR = " ";
     static final String PARAMS = "@";
     static final String KEY_VALUE_SEP = "=";
     static final String FIRST_TOKEN = "first";
@@ -128,17 +129,24 @@
             InputStream is = request.getRequestParameter(REQ_PARAM_FILE).getInputStream();
             BufferedReader reader = new BufferedReader(new InputStreamReader(is, StandardCharsets.UTF_8));
             String line;
+            StringBuilder cmdBuilder = new StringBuilder();
             while ((line = reader.readLine()) != null) {
                 if (isCommandCandidate(line)) {
-                    cmds.add(line);
+                    cmdBuilder.append(LINE_SEPARATOR + line.trim());
+                } else if (cmdBuilder.length() > 0){
+                    cmds.add(cmdBuilder.toString().trim());
+                    cmdBuilder = new StringBuilder();
                 }
             }
+            if (cmdBuilder.length() > 0) {
+                cmds.add(cmdBuilder.toString().trim());
+            }
         }
         return cmds;
     }
 
     @Override
-    protected void doPost(@NotNull SlingHttpServletRequest request, @NotNull SlingHttpServletResponse response) throws ServletException, IOException {
+    protected void doPost(@NotNull SlingHttpServletRequest request, @NotNull SlingHttpServletResponse response) throws IOException {
         String currentCommand = null;
         PrintWriter writer = response.getWriter();
         try {
diff --git a/src/test/java/org/apache/sling/pipes/internal/CommandExecutorImplTest.java b/src/test/java/org/apache/sling/pipes/internal/CommandExecutorImplTest.java
index 346b346..769a06f 100644
--- a/src/test/java/org/apache/sling/pipes/internal/CommandExecutorImplTest.java
+++ b/src/test/java/org/apache/sling/pipes/internal/CommandExecutorImplTest.java
@@ -174,15 +174,19 @@
     }
 
     @Test
-    public void testFileCommandServlet() throws IOException, ServletException {
+    public void testMultipeLineGetCommandLine() throws IOException, ServletException {
         Map<String, Object> params = new HashMap<>();
-        params.put(CommandExecutorImpl.REQ_PARAM_FILE, IOUtils.toString(getClass().getResourceAsStream("/testcommand"
+        params.put(CommandExecutorImpl.REQ_PARAM_FILE, IOUtils.toString(getClass().getResourceAsStream("/commandsFormats"
             + ".txt"), "UTF-8"));
-        String response = testServlet(params);
-        assertEquals("{\"items\":[\"/content/beatles/john\",\"/content/beatles/paul\","
-            + "\"/content/beatles/georges\",\"/content/beatles/ringo\"],"
-            + "\"size\":4}\n"
-            + "{\"items\":[\"/content/beatles/ringo/jcr:content\"],\"size\":1}\n", response);
+        MockSlingHttpServletRequest request = context.request();
+        request.setParameterMap(params);
+        request.setMethod("POST");
+        List<String> cmdList = commands.getCommandList(context.request());
+        assertEquals(4, cmdList.size());
+        for (int i = 0; i < 3; i ++) {
+            assertEquals("echo /content | $ /apps/pipes-it/fruit | children nt:unstructured", cmdList.get(i));
+        }
+        assertEquals ("echo /content | write one=foo nested/two=foo nested/three=foo", cmdList.get(3));
     }
 
     @Test
@@ -196,4 +200,16 @@
             + "\"/content/fruits/apple/isnota/pea\",\"/content/fruits/apple/isnota/plum\","
             + "\"/content/fruits/apple/isnota/carrot\"],\"size\":5}\n", response);
     }
+
+    @Test
+    public void testFileCommandServlet() throws IOException, ServletException {
+        Map<String, Object> params = new HashMap<>();
+        params.put(CommandExecutorImpl.REQ_PARAM_FILE, IOUtils.toString(getClass().getResourceAsStream("/testcommand"
+            + ".txt"), "UTF-8"));
+        String response = testServlet(params);
+        assertEquals("{\"items\":[\"/content/beatles/john\",\"/content/beatles/paul\","
+            + "\"/content/beatles/georges\",\"/content/beatles/ringo\"],"
+            + "\"size\":4}\n"
+            + "{\"items\":[\"/content/beatles/ringo/jcr:content\"],\"size\":1}\n", response);
+    }
 }
\ No newline at end of file
diff --git a/src/test/resources/commandsFormats.txt b/src/test/resources/commandsFormats.txt
new file mode 100644
index 0000000..505ce48
--- /dev/null
+++ b/src/test/resources/commandsFormats.txt
@@ -0,0 +1,30 @@
+#
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements.  See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License.  You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+echo /content | $ /apps/pipes-it/fruit | children nt:unstructured
+
+echo /content
+| $ /apps/pipes-it/fruit
+| children nt:unstructured
+
+echo /content |
+$ /apps/pipes-it/fruit |
+children nt:unstructured
+
+echo /content |
+write one=foo
+nested/two=foo
+nested/three=foo
\ No newline at end of file
